13. Quelques recettes pour faire durer le plaisir
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Vérifier le format d’une colonne
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
- cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
- value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Modifier/supprimer la ponctuation
Travailler avec un format date
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQoNCiMgMS4gUHLDqWxpbWluYWlyZXMNCiMjIERlcyBkb25uw6llcyBiaWVuIG9yZG9ubsOpZXMgY29tbWVuY2VudCBwYXIgc29pLW3Dqm1lIQ0KDQoNCi0gTGUgbmV0dG95YWdlIGRlIGZpY2hpZXJzIGRlIGRvbm7DqWVzIGVzdCB1bmUgdMOiY2hlIHNvdXZlbnQgbG9uZ3VlIGV0IGVubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkF2YW50IGQndXRpbGlzZXIgdW4gZmljaGllciBkZSBkb25uw6llcyBkYW5zIHNvbiBsb2dpY2llbCBkZSBjaG9peCwgc29uIG5ldHRveWFnZSBwZXV0IGRvbmMgaW5jbHVyZSBkZSBub21icmV1c2VzIHTDomNoZXMgY29tbWU6DQoNCjxkaXYgY2xhc3MgPSAicmlnaHQiPg0KPGltZyBzcmM9ImltYWdlcy9ib3R0bGUucG5nIiB3aWR0aD0iMTc1cHgiIC8+DQo8L2Rpdj4NCi0gTW9kaWZpZXIgbCdlbmNvZGFnZS4NCi0gU3VwcHJpbWVyIGxlcyBkb3VibG9ucy4NCi0gRGl2aXNlciBsZXMgY2VsbHVsZXMgY29tcG9zw6llcyBkZSB2YWxldXJzIG11bHRpcGxlcy4gICANCi0gUmVjb2RlciBsZXMgdmFsZXVycyBtYW5xdWFudGVzLg0KLSBSZXDDqXJlciBsZXMgZXJyZXVycyBkZSBzYWlzaWUsIGxlcyB2YWxldXJzIGFiZXJyYW50ZXMuLi4NCi0gRnVzaW9ubmVyIGRlcyBmaWNoaWVycy4NCi0gRnVzaW9ubmVyIGRlcyBjb2xvbm5lcy4NCi0gQWdyw6lnZXIgZGVzIHZhbGV1cnMgZGUgdmFyaWFibGVzLg0KLSBDcsOpZXIgZGVzIHZhcmlhYmxlcy4NCi0gQ2hhbmdlciBsZSBmb3JtYXQgZGVzIHZhcmlhYmxlcy4NCi0gQ2hhbmdlciBsZSBmb3JtYXQgZHUgZmljaGllci4NCi0gVHJhbnNmb3JtZXIgbGVzIGNvbG9ubmVzIGVuIHJhbmfDqWVzIChmb3JtYXQgIndpZGUiIGVuICJsb25nIikuDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgMi4gUG91cnF1b2kgT3BlblJlZmluZT8NCg0KLSBQbHVzaWV1cnMgbGFuZ2FnZXMgZGUgcHJvZ3JhbW1hdGlvbiBldCBvdXRpbHMgZCdhbmFseXNlIG91IGRlIGdlc3Rpb24gZGUgZG9ubsOpZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqXMsIG1haXMgT3BlblJlZmluZSBhIMOpdMOpIGNyw6nDqSBzcMOpY2lmaXF1ZW1lbnQgcG91ciBmYWlyZSBsZSBtw6luYWdlLg0KDQotIFBsdXMgZmFjaWxlIHF1ZSBSIGV0IHBsdXMgZWZmaWNhY2UgcXUnRXhjZWwuDQoNCi0gUGVybWV0IGRlIGZhY2lsZW1lbnQgaWRlbnRpZmllciBldCBkZSBjb3JyaWdlciBlbiBsb3QgZGVzIGRvbm7DqWVzIGluY29tcGzDqHRlcywgbWFucXVhbnRlcywgZXJyb27DqWVzLCBpbmNvaMOpcmVudGVzLCBub24gcGVydGluZW50ZXMsIG1hbCBmb3JtYXTDqWVzLCBxdSdlbGxlcyBzb2llbnQgbnVtw6lyaXF1ZXMgb3UgdGV4dHVlbGxlcy4NCg0KDQo8Y2VudGVyPiAgIA0KDQo8aW1nIHNyYz0iaW1hZ2VzLzE5MTgtQWQtODYwLTg2MHg1NzMuanBnIiB3aWR0aD0iNjAlIi8+DQoNCjwvY2VudGVyPiAgIA0KDQoNCjwvYnI+DQoNCiMjIyBGb25jdGlvbnMgc3DDqWNpYWxpc8OpZXMgcG91cjoNCg0KLSAqRXhwbG9yZXIqIHNlcyBkb25uw6llcyBzb3VzIHRvdXMgc2VzIGFuZ2xlcyAoZ3LDomNlIMOgIGRlcyBmaWx0cmVzLCB0cmlzLCBmYWNldHRlcywgcmVncm91cGVtZW50cykuICAgDQotICpOZXR0b3llciogOiByZXDDqXJlciBkZXMgZXJyZXVycywgbW9kaWZpZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMuLi4NCi0gKlRyYW5mb3JtZXIqIDogY2hhbmdlciBmb3JtYXRzIGRlIHNlcyB2YXJpYWJsZXMsIGNyw6llciBkZSBub3V2ZWxsZXMgdmFyaWFibGVzIHN1ciBsYSBiYXNlIGRlcyBjb2xvbm5lcyBwcsOpc2VudGVzLi4uDQotICpFbnJpY2hpciogOiBmdXNpb25uZXIgZGVzIGZpY2hpZXJzLCBpbXBvcnRlciBkZXMgZG9ubsOpZXMgZW4gbGlnbmUgKEFQSSwgVVJMcyksIHLDqWNvbmNpbGlhdGlvbiAoV2lraWRhdGEgZXQgW2F1dHJlcyBzb3VyY2VzIGV4dGVybmVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvUmVjb25jaWxhYmxlLURhdGEtU291cmNlcykpLi4uDQotICpBdXRvbWF0aXNlciogKHLDqXV0aWxpc2VyIHNvbiBoaXN0b3JpcXVlIGRlIG1hbmlwdWxhdGlvbnMpDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQoNCioqw4Agbm90ZXIqKiANCg0KT3BlblJlZmluZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZCdhbmFseXNlIG91IGRlIHZpc3VhbGlzYXRpb24gZXQgbmUgcGVybWV0IHBhcyBkZSBjcsOpZXIgdW4gamV1IGRlIGRvbm7DqWVzIMOgIHBhcnRpciBkZSB6w6lyby4gQ2Ugbidlc3QgcGFzIHVuIG91dGlsIGRlIHJlbXBsYWNlbWVudCBtYWlzIGNvbXBsw6ltZW50YWlyZS4NCg0KPC9kaXY+DQoNCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4xLiBFeGVtcGxlcyBkJ3V0aWxpc2F0aW9uDQoNCkhhcm1vbmlzZXIsIHN0YW5kYXJkaXNlciwgdW5pZm9ybWlzZXIuLi4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SOC5qcGcpICAgDQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDIuMi4gUG91ciBhdm9pciBkZSBiZWxsZXMgZG9ubsOpZXMgKnRpZHkqDQoNClBlcm1ldCBkJ2FwcGxpcXVlciBsZXMgcHJpbmNpcGVzIGR1IFtUaWR5ZGF0YV0oaHR0cHM6Ly9yNGRzLmhhZC5jby5uei90aWR5LWRhdGEuaHRtbCkgDQoNCj4g4oCcVGlkeSBkYXRhc2V0cyBhcmUgYWxsIGFsaWtlLCBidXQgZXZlcnkgbWVzc3kgZGF0YXNldCBpcyBtZXNzeSBpbiBpdHMgb3duIHdheS7igJ0g4oCT4oCTIEhhZGxleSBXaWNraGFtDQoNCjwvYnI+DQoNCioqVHJvaXMgcHJpbmNpcGVzIGRlIGJhc2U6KioNCg0KMS4gQ2hhcXVlIGNvbG9ubmUgZXN0IHVuZSAqKnZhcmlhYmxlKiouDQoyLiBDaGFxdWUgbGlnbmUgZXN0IHVuZSAqKm9ic2VydmF0aW9uKiouDQozLiBDaGFxdWUgY2VsbHVsZSDDoCAqKnVuZSBzZXVsZSB2YWxldXIqKi4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTAuanBnKSANCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4zLiAgUHJpbmNpcGFsZXMgY2FyYWN0w6lyaXN0aXF1ZXMNCg0KLSBMb2dpY2llbCBncmF0dWl0IGV0IG91dmVydCB1dGlsaXPDqSBwYXIgdW5lIGxhcmdlIGNvbW11bmF1dMOpLg0KDQotIENyw6nDqSBlbiAyMDEwICgqRnJlZWJhc2UgR3JpZHdvcmtzKiksIHJhY2hldMOpIHBhciBHb29nbGUgZW4gMjAxMCAoKkdvb2dsZSBSZWZpbmUqKSwgcHVpcyBvdXZlcnR1cmUgZHUgY29kZSBlbiAyMDEyIGV0IHJlcHJpcyBwYXIgY29tbXVuYXV0w6kgcXVpIGxlIGTDqXBsYWNlIHN1ciBHaXRodWIgZXQgZGV2aWVudCAqT3BlblJlZmluZSouDQoNCi0gTXVsdGlwbGF0ZWZvcm1lczogV2luZG93cywgTWFjLCBMaW51eC4NCg0KLSBJbnRlcmZhY2Ugc2VtYmxhYmxlIMOgIHVuIHRhYmxldXIgY29tbWUgRXhjZWwsIG1haXMgZG9udCBsZSBmb25jdGlvbm5lbWVudCBzJ2FwcGFyZW50ZSBwbHVzIMOgIHVuZSBiYXNlIGRlIGRvbm7DqWVzIChwYXIgZXhlbXBsZSBsZXMgdHJhaXRlbWVudHMgc29udCBzw6lwYXLDqXMgZGVzIGRvbm7DqWVzLCBpZSBsZXMgZm9ybXVsZXMgbmUgc29udCBwYXMgZW5yZWdpc3Ryw6llcyBkYW5zIGxlcyBjZWxsdWxlcyBtYWlzIGRhbnMgdW4gc2NyaXB0KS4NCg0KLSBBc3NvY2llIGxhIGZhY2lsaXTDqSBkJ3VzYWdlIGQndW4gbG9naWNpZWwgY29tbWUgRXhjZWwgw6AgbGEgcHVpc3NhbmNlIGQnb3V0aWxzIGRlIHByb2dyYW1tYXRpb24gZXQgZCdhbGdvcml0aG1lcy4NCg0KLSBVc2FnZSBkZSBsJyoqaW50ZXJmYWNlIGdyYXBoaXF1ZSoqIGV0L291IGRlICoqc2NyaXB0cyBHUkVMKiogKCpHb29nbGUgUmVmaW5lIEV4cHJlc3Npb24gTGFuZ3VhZ2UqKSBldCBkJ2V4cHJlc3Npb25zIHLDqWd1bGnDqHJlczogcHJvcG9zZSB1biBlbnNlbWJsZSBkZSBmb25jdGlvbnMgYXV0b21hdGlzw6llcyBkb25jIG5lIG7DqWNlc3NpdGUgw6AgbGEgYmFzZSBhdWN1bmUgY29tcMOpdGVuY2UgZW4gcHJvZ3JhbW1hdGlvbiwgbWFpcyBsJ3VzYWdlIGR1IGxhbmdhZ2UgcGVybWV0IGQnYWxsZXIgYmVhdWNvdXAgcGx1cyBsb2luLg0KDQotIFBhcnRpY3VsacOocmVtZW50IHB1aXNzYW50IHBvdXIgbGUgbmV0dG95YWdlIGRlIHRhYmxlIGRlIGRvbm7DqWVzIGF2ZWMgZHUgY29udGVudSB0ZXh0dWVsLg0KDQotICoqUmVwcm9kdWN0aWJpbGl0w6kqKiEgUGVybWV0IGRlIGdhcmRlciB1biBoaXN0b3JpcXVlIGRlIHRvdXRlcyBsZXMgbWFuaXB1bGF0aW9ucyBlZmZlY3R1w6llcyBzdXIgc2VzIGRvbm7DqWVzIGFmaW4gZGUgbGVzIHBhcnRhZ2VyLCBkZSBsZXMgcsOpdXRpbGlzZXIgc3VyIGQnYXV0cmVzIGRvbm7DqWVzLi4uDQoNCjwvYnI+DQoNCg0KKioqDQoNCg0KIyAzLiBJbnN0YWxsYXRpb24gZXQgZm9uY3Rpb25uZW1lbnQgZ8OpbsOpcmFsDQoNCi0gTGUgZm9uY3Rpb25uZW1lbnQgZCdPcGVuUmVmaW5lIHBldXQgw6p0cmUgdW4gcGV1IGTDqXJvdXRhbnQgYXUgZMOpcGFydCBjYXIgaWwgbid5IGEgcGFzIGQnaW5zdGFsbGF0aW9uIGVuIGJvbm5lIGV0IGR1ZSBmb3JtZSBjb21tZSBwb3VyIHVuIGxvZ2ljaWVsIHLDqWd1bGllci4NCg0KLSBbVMOpbMOpY2hhcmdlciBldCBkw6l6aXBwZXJdKGh0dHBzOi8vb3BlbnJlZmluZS5vcmcvZG93bmxvYWQuaHRtbCkgbGUgbG9naWNpZWwgZGFucyB1biBkb3NzaWVyIGRlIHNvbiBjaG9peC4NCg0KLSBDcsOpw6kgZW4gbGFuZ2FnZSBKYXZhIFtkb25jIG7DqWNlc3NpdGUgbCdpbnN0YWxsYXRpb24gZGUgSmF2YSAoNjQgYml0cyBkZSBwcsOpZsOpcmVuY2UpXShodHRwczovL3d3dy5qYXZhLmNvbS9lbi9kb3dubG9hZC8pLg0KDQotIE5hdmlnYXRldXJzIMOgIHByaXZpbMOpZ2llcjogQ2hyb21lLCBPcGVyYSwgRWRnZS4gRmlyZWZveCBwZXV0IHBvc2VyIHByb2Jsw6htZSAobmUgZm9uY3Rpb25uZSBwYXMgZGFucyBJRSkuICANCg0KLSBQb3VyIGTDqW1hcnJlciBsZSBsb2dpY2llbCwgY2xpcXVlciBzdXIgbGUgZmljaGllciBgYCBgb3BlbnJlZmluZS5leGVgIGBgIG91IGByZWZpbmUuYmF0YC4gSWwgZXN0IHV0aWxlIGRlIGZhaXJlIHVuIGNsaWMtZHJvaXQgc3VyIGxlIGZpY2hpZXIgLmV4ZSBwb3VyIGwnw6lwaW5nbGVyIGRhbnMgc2EgYmFycmUgZGUgdMOiY2hlcyAoc3VyIE1hYywgZMOpcGxhY2VyIGwnaWPDtG5lIE9wZW5SZWZpbmUgZGFucyBsZSBkb3NzaWVyIGQnYXBwbGljYXRpb25zIGV0IGRvdWJsZSBjbGlxdWVyIHN1ciBjZWxsZS1jaSkuDQoNCi0gVW5lIGZlbsOqdHJlIGRlIGNvbW1hbmRlIG5vaXJlIHMnb3V2cmlyYSBldCBsYW5jZXJhIGwnb3V2ZXJ0dXJlIGQndW4gb25nbGV0IGRhbnMgbGUgbmF2aWdhdGV1ciB3ZWIuICANCg0KLSBMYSBmZW7DqnRyZSBkZSBjb21tYW5kZXMgcGV1dCBlbnN1aXRlIMOqdHJlIGlnbm9yw6llIG1haXMgTkUgUEFTIExBIEZFUk1FUiEgRWxsZSBuZSBzZXJ2aXJhIHF1J8OgIGZlcm1lciBsYSBzZXNzaW9uIGRlIHRyYXZhaWwuICANCg0KLSBTaSBsZSBuYXZpZ2F0ZXVyIG5lIHMnb3V2cmUgcGFzIGF1dG9tYXRpcXVlbWVudCwgc2Fpc2lyIGwnYWRyZXNzZSBodHRwOi8vMTI3LjAuMC4xOjMzMzMvIG91IGh0dHA6Ly9sb2NhbGhvc3Q6MzMzMyBkYW5zIHVuIG9uZ2xldC4gDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjE3LmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAzLjEuIFRyYXZhaWwgbG9jYWwNCg0KLSBSZXBvc2UgZG9uYyBzdXIgZGV1eCBjb21wb3NhbnRlczogdW4gKipzZXJ2ZXVyIHdlYiBsb2NhbCoqIGV0IHVuICoqb25nbGV0IGRlIG5hdmlnYXRldXIgd2ViKiogcG9pbnRhbnQgdmVycyBsJ2FkcmVzc2UgZHUgc2VydmV1ciBzdXIgc29uIHBvc3RlLg0KDQotIExlIHRyYXZhaWwgc2UgZmFpdCBkYW5zIHVuIG9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHF1aSBlc3QgdW5lIHNpbXBsZSBpbnRlcmZhY2UgZ3JhcGhpcXVlIHBvdXIgaW50ZXJhZ2lyIGF2ZWMgY2Ugc2VydmV1ciBsb2NhbCwgbWFpcyAqKmxlcyBkb25uw6llcyBuZSBzb250IHBhcyBzdXIgbGUgIm51YWdlIioqLg0KDQotIFRyYXZhaWwgbG9jYWwgZG9uYyBwYXMgZCdlbnZpcm9ubmVtZW50IGNvbGxhYm9yYXRpZi4gDQoNCi0gTGVzIGZpY2hpZXJzIHByb2dyYW1tZXMgc2UgdHJvdXZlcm9udCBkYW5zIGxlIGRvc3NpZXIgZCdpbnN0YWxsYXRpb24gZXQgbGVzIGZpY2hpZXJzIGRlIHByb2pldHMgZGFucyBsZSAqd29ya3NwYWNlIGRpcmVjdG9yeSouDQoNCi0gT3BlblJlZmluZSBuZSBtb2RpZmllIHBhcyBsZSBmaWNoaWVyIG9yaWdpbmFsLCBpbCB0cmF2YWlsbGUgw6AgcGFydGlyIGQndW5lICoqY29waWUgZW4gbcOpbW9pcmUgc3RvY2vDqWUgZW4gYXJjaGl2ZXMqKiBkYW5zIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwuDQoNCi0gTGUgcHJvamV0IGVzdCBlbnJlZ2lzdHLDqSBlbiBmb3JtYXQgT3BlblJlZmluZSBhdXRvbWF0aXF1ZW1lbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwgw6AgdG91dGVzIGxlcyA1IG1pbnV0ZXMgKFtwZXV0IMOqdHJlIG1vZGlmacOpXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL3J1bm5pbmcjanZtLXByZWZlcmVuY2VzKSkuDQoNCi0gTGUgZmljaGllciBkZSBkb25uw6llcyB1bmUgZm9pcyBuZXR0b3nDqSBwb3VycmEgw6p0cmUgZXhwb3J0w6kgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyBldCBsJ2hpc3RvcmlxdWUvc3ludGF4ZSBwb3VycmEgw6p0cmUgZXh0cmFpdCBlbiBmb3JtYXQgSlNPTiBldCBlbnJlZ2lzdHLDqSBkYW5zIHVuIGZpY2hpZXIgLnR4dC4NCg0KLSBQb3VyIGZlcm1lciBsYSBzZXNzaW9uIGRlIHRyYXZhaWwgY29ycmVjdGVtZW50LCBmYWlyZSBgQ3RybCArIGNgIGRhbnMgZmVuw6p0cmUgZGUgY29tbWFuZGUgKHBldXQgw6p0cmUgbsOpY2Vzc2FpcmUgZGUgbGUgZmFpcmUgcGx1cyBkJ3VuZSBmb2lzKSA9IGVucmVnaXN0cmUgbGUgcHJvamV0IGV0IGZlcm1lIGxlIHNlcnZldXIuDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQoqKsOAIG5vdGVyKiogIA0KLSBQZXJtZXQgZGUgdHJhdmFpbGxlciBzdXIgZGUgZ3JvcyBmaWNoaWVycyBtYWlzIGxhIHRhaWxsZSBwb3NzaWJsZSBlc3QgdG91dCBkZSBtw6ptZSBsaW1pdMOpZSwgbGEgcGVyZm9ybWFuY2UgcGV1dCBkZXZlbmlyIHByb2Jsw6ltYXRpcXVlIMOgIHBsdXNpZXVycyBjZW50YWluZXMgZGUgbWlsbGllcnMgZGUgbGlnbmVzICh0b3V0IGTDqXBlbmRhbnQgZHUgbm9tYnJlIGRlIGNvbG9ubmVzKSBkb25jIHBhcyB2cmFpbWVudCBkw6l2ZWxvcHDDqSBwb3VyIGZhaXJlIGR1IGJpZyBkYXRhLg0KLSBUcmF2YWlsbGUgYXZlYyAxR28gZGUgbcOpbW9pcmUgcGFyIGTDqWZhdXQuIMOAIHBsdXMgZGUgMTAwIDAwMCBsaWduZXMsIGlsIHBldXQgw6p0cmUgcHLDqWbDqXJhYmxlIGQnW2F1Z21lbnRlciBsYSBtw6ltb2lyZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9pbnN0YWxsaW5nI2luY3JlYXNpbmctbWVtb3J5LWFsbG9jYXRpb24pIGRlIHRyYXZhaWw6ICANCiAgLSBPdXZyaXIgbGUgZmljaGllciByZWZpbmUuaW5pIGRhbnMgbm90ZXBhZCBldCBtb2RpZmllciBsYSBsaWduZSBSRUZJTkVfTUVNT1JZID0gcGFyYW1ldHJlLiAgDQogIC0gUGFyIGxhIHN1aXRlIGxhbmNlciBPUiBhdmVjIGxlIGZpY2hpZXIgKnJlZmluZS5iYXQqIGV0IG5vbiAqb3BlbnJlZmluZS5leGUgKi4gICANCg0KPC9kaXY+DQo8L2JyPg0KDQoqKioNCg0KDQojIyAzLjIuIMOJY3JhbiBkJ2FjY3VlaWwNCg0KLSDDgCBwYXJ0aXIgZHUgbWVudSBkZSBnYXVjaGUsIGlsIGVzdCBwb3NzaWJsZSBkZSBgQ3LDqWVyIHVuIHByb2pldGAsIGBPdXZyaXIgdW4gcHJvamV0YCAoaGlzdG9yaXF1ZSBkZXMgcHJvamV0cyBlbnJlZ2lzdHLDqXMpIG91IGBJbXBvcnRlciB1biBwcm9qZXQgYCAoYXJjaGl2ZXMgLnppcCBzZSB0cm91dmFudCBkYW5zIGxlIGRvc3NpZXIgZGUgdHJhdmFpbCkuICAgDQoNCi0gUG91ciBjaGFuZ2VyIGxhIGxhbmd1ZSBkZSBsJ2ludGVyZmFjZSBhdSBmcmFuw6dhaXMsIGNsaXF1ZXIgc3VyIGwnb25nbGV0IGBMYW5ndWVgIGRhbnMgbGUgbWVudSBkZSBnYXVjaGUuICANCg0KLSBMZSBmaWNoaWVyIHBldXQgw6p0cmUgY3LDqcOpIMOgIHBhcnRpciBkZSBkaWZmw6lyZW50ZXMgc291cmNlczogYENldCBvcmRpbmF0ZXVyYCAocG9zdGUgbG9jYWwpLCBgQWRyZXNzZXMgd2ViIChVUkxzKWAsIGBQcmVzc2UtcGFwaWVyYCAoY29wacOpLWNvbGzDqSksIGBHb29nbGUgZGF0YWAgKEdvb2dsZSBzaGVldHMpLi4uKSBldCBlbiBkaWZmw6lyZW50cyBmb3JtYXRzICguY3N2LCAudHh0LCAueG1sLCAueGxzLCAuSlNPTiwgLnppcC4uLiAoY2VydGFpbmVzIGV4dGVuc2lvbnMgcGVybWV0dGVudCBsJ3VzYWdlIGQnYXV0cmVzIGZvcm1hdHMgY29tbWUgcmRmKS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxLmpwZykgIA0KDQo8L2NlbnRlcj4gIA0KDQotIERldXggZmljaGllcnMgb3UgcGx1cyBwZXV2ZW50IMOqdHJlIGltcG9ydMOpcyBlbiBtw6ptZSB0ZW1wcy4gTGVzIGxpZ25lcyBzZXJvbnQgaW1wb3J0w6llcyB1bmUgw6AgbGEgc3VpdGUgZGUgbCdhdXRyZSBzZWxvbiBsJ29yZHJlIGQnaW1wb3J0YXRpb24gKHVuZSBjb2xvbm5lIHBlcm1ldHRhbnQgZCdpZGVudGlmaWVyIGxlIGZpY2hpZXIgc291cmNlIHNlcmEgY3LDqcOpZSBhdXRvbWF0aXF1ZW1lbnQpLiANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4zLiBIaXN0b3JpcXVlIGRlcyBwcm9qZXRzDQoNCi0gTCdvbmdsZXQgYE91dnJpciB1biBwcm9qZXRgIHBlcm1ldDoNCiAgLSBEJ2FjY8OpZGVyIGV0IGQnb3V2cmlyIHRvdXMgbGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIGxvY2FsZW1lbnQuDQogIC0gRCfDqWRpdGVyIHNlcyBtw6l0YWRvbm7DqWVzIChsaWVuIGBEw6l0YWlsc2ApLg0KICAtIEQnYWNjw6lkZXIgYXUgZG9zc2llciBkZSB0cmF2YWlsIChkw6lmaW5pIHBhciBkw6lmYXV0KSBvw7kgT3BlblJlZmluZSBzdG9ja2UgbGVzIGFyY2hpdmVzIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBwYXIgbGUgYmlhaXMgZHUgbGllbiBgUGFyY291cmlyIGxlIGRvc3NpZXIgZGUgbCdlc3BhY2UgZGUgdHJhdmFpbGAuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjMuanBnKQ0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50IFs1XSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSBbNl0sIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzIFs5XS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW4gbm91dmVhdSBwcm9qZXQgZW4gaW1wb3J0YW50IHVuIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpJbmNpZGVudHMgbcOpdHJvLW10bC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuIC0+IFN1aXZhbnQuDQooTGUgZmljaGllciBlc3QgYXVzc2kgZGlzcG9uaWJsZSBzdXIgbGUgc2l0ZSBbRG9ubsOpZXMgb3V2ZXJ0ZXMgTW9udHLDqWFsXShodHRwczovL2Rvbm5lZXMubW9udHJlYWwuY2Evc29jaWV0ZS1kZS10cmFuc3BvcnQtZGUtbW9udHJlYWwvaW5jaWRlbnRzLWR1LXJlc2VhdS1kdS1tZXRybykpLiAgICAgDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiAuLi5gICgxMCAtPiAqKmNvY2hlcioqKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDUuIEV4cGxvcmVyIGwnaW50ZXJmYWNlDQoNCi0gTCdpbnRlcmZhY2UgZXN0IHNpbWlsYWlyZSDDoCBFeGNlbCBtYWlzIG9uIG5lIHBldXQgdm9pciBsJ2Vuc2VtYmxlIGRlcyBsaWduZXMsIGxhICJsb2dpcXVlIiBkJ09wZW5SZWZpbmUgcmVwb3NlIHN1ciBsZSB0cmF2YWlsIGVuICoqY29sb25uZXMqKi4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SNC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPiAgDQoNClsxXSBMaWVuIHNvdXMgbCdpY8O0bmUgcmVudm9pIHZlcnMgbGEgcGFnZSBkJ2FjY3VlaWwvaW1wb3J0YXRpb24uICANClsyXSBSZW5vbW1lciBsZSBub20gZGUgc29uIHByb2pldCBlbiB0b3V0IHRlbXBzLiAgDQpbM10gUGVybWFsaWVuIHF1aSBwZXJtZXQgZGUgcmV2ZW5pciDDoCB1bmUgdnVlIHByw6ljaXNlIChhZmZpY2hhZ2UsIHRyaSwgZmFjZXR0ZXMuLi4pIGR1IHByb2pldC4gIA0KWzRdIE5vbWJyZSBkZSBsaWduZXMvb2JzZXJ2YXRpb25zIGR1IGZpY2hpZXIuICANCls1XSBDaGFuZ2VtZW50IGR1IG1vZGUgbGlnbmVzIG91IG9ic2VydmF0aW9ucy4gIA0KWzZdIE1vZGlmaWVyIGxlIG5vbWJyZSBkZSBsaWduZXMgYWZmaWNow6llcy4gIA0KWzddIFBhc3NlciBkJ3VuZSBwYWdlIMOgIGwnYXV0cmUuICANCls4XSBPdXZyaXIgdW4gbm91dmVsIG9uZ2xldCBPcGVuUmVmaW5lLiAgDQpbOV0gRXhwb3J0ZXIgbGUgZmljaGllciBlbiBkaWZmw6lyZW50cyBmb3JtYXRzLiAgDQoNCjwvZGl2PiAgDQoNCjwvYnI+ICANCg0KKioqDQoNCiMjIDUuMSBEZXV4IHZ1ZXMgZGVzIGRvbm7DqWVzDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRldXggdnVlcyBkZXMgZG9ubsOpZXM6IGBsaWduZXNgIGV0IGBlbnRyw6llcy5gIExlcyBkb25uw6llcyBzb250IGfDqW7DqXJhbGVtZW50IHByw6lzZW50w6llcyBlbiBtb2RlIGBsaWduZXNgLCBjJ2VzdC3DoC1kaXJlIGNoYXF1ZSBsaWduZSByZXByw6lzZW50ZSB1bmUgb2JzZXJ2YXRpb24uIExlIG1vZGUgYGVudHLDqWVzYCBwZXJtZXQgZCdhc3NvY2llciBwbHVzaWV1cnMgbGlnbmVzIMOgIHVuZSBvYnNlcnZhdGlvbi4NCg0KLSBJbCBlc3QgZG9uYyBwb3NzaWJsZSBkZSBtb2RpZmllciBsYSBzdHJ1Y3R1cmUgZHUgZmljaGllciBwb3VyIHF1ZSBwbHVzaWV1cnMgbGlnbmVzIHNvaWVudCBhc3NvY2nDqWVzIMOgIHVuIHNldWwgY2FzIGVuIHNlIGJhc2FudCBzdXIgbGEgY29sb25uZSBjbMOpICgqKnNldWxlIGxhIGxpZ25lIG9yaWdpbmFsZSBzZXJhIG51bcOpcm90w6llKiopLCBtYWlzIGRvaXQgc2UgZmFpcmUgYXZlYyBwcsOpY2F1dGlvbnMuIFBvdXIgbGVzIGxvZ2ljaWVscyBkJ2FuYWx5c2UsIGxlIGZvcm1hdCAqdGlkeSogKGBsaWduZXNgKSBlc3Qgw6AgcHJpdmlsw6lnaWVyLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I0MC5qcGcpDQoNCjwvY2VudGVyPiAgDQoNCioqKg0KDQoNCiMjIDUuMi4gTCfDqWRpdGlvbiBkZSBjZWxsdWxlcw0KDQotIElsIGVzdCBwb3NzaWJsZSBkJ8OpZGl0ZXIgbWFudWVsbGVtZW50IGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgaW5kaXZpZHVlbGxlcyBlbiBzZSBwbGHDp2FudCBzdXIgY2hhY3VuZSBldCBlbiBjbGlxdWFudCBgZWRpdGAsIG1haXMgT3BlblJlZmluZSBwcml2aWzDqWdpZSBsZSAqKnRyYXZhaWwgZW4gbG90IHBhciBjb2xvbm5lcyoqIHBvdXIgZmlsdHJlciwgdHJpZXIsIHRyYW5zZm9ybWVyLg0KDQotIEwnw6lkaXRpb24gZGlyZWN0ZSBwZXV0IHMnYXBwbGlxdWVyIGluZGl2aWR1ZWxsZW1lbnQgb3Ugc3VyIHRvdXRlcyBsZXMgY2VsbHVsZXMgYXZlYyBsYSBtw6ptZSB2YWxldXIgZGFucyBjZXR0ZSBjb2xvbm5lLg0KDQotIFBlcm1ldCDDqWdhbGVtZW50IGRlIG1vZGlmaWVyIGxlIGZvcm1hdCBkZSBsYSBjZWxsdWxlLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IyMi5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIERhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGNsaXF1ZXIgZGFucyB1bmUgY2VsbHVsZSAqQXV0cmVzKiwgw6lkaXRlciBzb24gY29udGVudSBwb3VyICphdXRyZSogZXQgYXBwbGlxdWVyIMOgIGxhIGNlbGx1bGUuIA0KDQotIERhbnMgbGEgY29sb25uZSAqw4l2YWN1YXRpb24qLCBtb2RpZmllciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgIiMiIHBhciAqTm9uKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMy4gRm9ybWF0IGRlcyBkb25uw6llcyAgDQoNCi0gw4AgbCdpbXBvcnRhdGlvbiBkJ3VuIGZpY2hpZXIsIGNoYXF1ZSBjZWxsdWxlIHNlIHZlcnJhIGF0dHJpYnVlciB1biBmb3JtYXQuICANCi0gUGFyIGTDqWZhdXQsIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVzdCBkZSBmb3JtYXQgY2hhw65uZXMuICAgDQotIExlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIHJlY29ubnUgY29tbWUgbnVtw6lyaXF1ZSBldCBkYXRlIHNlcmEgZGUgY291bGV1ciB2ZXJ0ZS4gICANCi0gTGUgZm9ybWF0IHBldXQgw6p0cmUgbW9kaWZpw6kgZGUgZGlmZsOpcmVudGVzIGZhw6dvbnM6IGBlZGl0YCwgYFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgLCBGZW7DqnRyZSBHUkVMLiAgIA0KLSBDZSBmb3JtYXQgYXVyYSB1biBpbXBhY3Qgc3VyIGxlcyBhY3Rpb25zIHBvc3NpYmxlcy4gICANCg0KIyMjIyBUcm9pcyBmb3JtYXRzIGRlIGJhc2U6IA0KICAxLiBDaGHDrm5lIGRlIGNhcmFjdMOocmVzDQogIDIuIE5vbWJyZQ0KICAzLiBEYXRlIChub3JtZSBJU08tODYwMSBZWVlZLU1NLUREVEhIOk1NOlNTWikqDQogIA0KICANCiMjIyMgRGV1eCBmb3JtYXRzIGTDqWNvdWxhbnQgZCdhY3Rpb25zOiANCiAgLSBFcnJldXIgKGZvcm1hdCBhdHRyaWJ1w6kgc3VpdGUgw6AgdW5lIGVycmV1ciBkZSB0cmFuc2Zvcm1hdGlvbikgIA0KICAtIE51bGwqKg0KDQoNCiMjIyMgRGV1eCBhdXRyZXMgdHlwZXMgcGFydGljdWxpZXJzIGTDqWNvdWxhbnQgZGUgbWFuaXB1bGF0aW9ucw0KICAtIEJvb2zDqWVuICh2YWxldXIgYmluYWlyZSBUIG91IEYpDQogIC0gKkFycmF5KiAobGlzdGUgZGUgdmFsZXVycyBzw6lwYXLDqWVzIHBhciB1bmUgdmlyZ3VsZSBlbnRyZSBjcm9jaGV0cyBwb3V2YW50IMOqdHJlIHRyYW5zZm9ybcOpZXMpDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+ICANCiMjIyMjICogRm9ybWF0IGRhdGUNCg0KLSBTZWxvbiBsZXMgYmVzb2lucywgbGVzIGRhdGVzIHBldXZlbnQgw6p0cmUgdHJhaXTDqWVzIHNvdXMgZm9ybWUgZGUgYHRleHRlYCwgZGUgYG5vbWJyZWAgb3UgYGRhdGVgIChsZSBmb3JtYXQgZGF0ZSBlc3Qgc3VydG91dCBuw6ljZXNzYWlyZSBwb3VyIGxlcyBjYWxjdWxzIGRlIGRhdGVzKS4NCi0gTGUgZm9ybWF0IGRhdGUgcmVwb3NlIHN1ciB1bmUgc8OpcmllIGQnb3V0aWxzIGV0IGRlICBzdGFuZGFyZHMgcG91ciByZWNvbm5haXRyZSBldCBjb252ZXJ0aXIgbGVzIHZhbGV1cnMgb3JpZ2luYWxlcyBlbiBkYXRlLiANCi0gUG91ciBxdSd1bmUgY2VsbHVsZSBzb2l0IHJlY29ubnVlIGNvbW1lIGRhdGUsIGVsbGUgc2VyYSB0cmFuc2Zvcm3DqWUgYXUgZm9ybWF0ICpJU08tODYwMS1jb21wbGlhbnQqLg0KLSBQb3NzaWJsZSBkZSBtb2RpZmllciBjZSBmb3JtYXQgcG91ciBxdSdpbCBzb2l0IHBsdXMgZmFjaWxlbWVudCBsaXNpYmxlIMOgIGwnZXhwb3J0YXRpb24uDQoNCg0KIyMjIyMgKiogRm9ybWF0ICJtYW5xdWFudCINCg0KLSBPcGVuUmVmaW5lIGZhaXQgdW5lIGRpc3RpbmN0aW9uIGVudHJlIGxlcyAqKmNlbGx1bGVzIHZpZGVzIGF2ZWMgZXNwYWNlcyBibGFuY3MqKiAocXVpIG5lIHNvbnQgcGFzIHZpZGVzISksIGxlcyAqKnZhbGV1cnMgdmlkZXMqKiAoY2hhaW5lIGRlIGxvbmd1ZXVyIDApLCBldCBsZXMgKip2YWxldXJzICJudWxsIioqICh0eXBlIHNww6ljaWFsIHF1aSBuJ2VzdCBwYXMgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcykuIExlcyAqdmlkZXMqIGV0IGxlcyAqbnVsbCogc29udCBhdXNzaSBjb25zaWTDqXLDqXMgY29tbWUgKkJsYW5rKi4NCi0gUGx1c2lldXJzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIHNvdXMgYEZhY2V0dGVzYCBldCBgw4lkaXRlciBsZXMgY2VsbHVsZXNgIHBlcm1ldHRlbnQgZGUgZ8OpcmVyIGNlcyB0eXBlcyBkZSB2YWxldXJzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqVHJhbnNmb3JtZXIgdW5lIGNvbG9ubmUgZGUgZm9ybWF0IGNhcmFjdMOocmUgZW4gZm9ybWF0IGRhdGUqKjogIA0KLSBEYW5zIGxhIGNvbG9ubmUgKkpvdXIgY2FsZW5kYWlyZSo6IGBNZW51IC0+IMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAgICAgDQoNCioqVHJhbnNmb3JtZXIgdW5lIGNvbG9ubmUgZGUgZm9ybWF0IGNhcmFjdMOocmUgZW4gZm9ybWF0IG5vbWJyZSoqOiAgIA0KLSBEYW5zIGxhIGNvbG9ubmUgKlBvcnRlKiwgY2xpcXVlciBkYW5zIHVuZSBjZWxsdWxlLCDDqWRpdGVyIGxlIGZvcm1hdCDDoCAqTm9tYnJlKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KLSBSZWNvbW1lbmNlciBsYSBwcm9jw6lkdXJlIGF2ZWMgbGUgZm9uY3Rpb24gKlRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMqLg0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KLSBMZSBjaGFuZ2VtZW50IGRlIGZvcm1hdCBwYXIgw6lkaXRpb24gZGlyZWN0ZSBkJ3VuZSBjZWxsdWxlIGVzdCB1bmUgb3DDqXJhdGlvbiBkaXN0aW5jdGUgZGUgbGEgdHJhbnNmb3JtYXRpb24gZHUgY29udGVudS4gTGEgcHJlbWnDqHJlIG9ww6lyYXRpb24gYXJyaXZlIHBhcmZvaXMgw6AgY2hhbmdlciBkZXMgZm9ybWF0cyBxdWUgbGEgdHJhbnNmb3JtYXRpb24gbmUgcGV1dCBmYWlyZS4gUG91ciBwbHVzIGQnaW5mb3JtYXRpb24gc3VyIGxlcyBmb3JtYXRzLCB2b2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwbG9yaW5nKS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuNC4gTGEgZ2VzdGlvbiBkZXMgbGlnbmVzIGV0IGNvbG9ubmVzDQoNCiMjIyMgTGEgZ2VzdGlvbiBkZXMgY29sb25uZXMgcGV1dCBzZSBmYWlyZToNCg0KLSAqKlN1ciBjaGFxdWUgY29sb25uZSoqOiANCiAgLSBGb25jdGlvbnMgc291cyBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IETDqXBsYWNlciAuLi4gLyBSZW5vbW1lciAvIFN1cHByaW1lcmAgICANCiAgLSBGb25jdGlvbnMgc291cyBgQXBlcsOndSAtPiBNYXNxdWVyLi4uIGAgICANCg0KDQotICoqU3VyIGxhIGNvbG9ubmUgYFRvdXRlc2AqKjogICAgIA0KICAtIGDDiWRpdGVyIGxlcyBjb2xvbm5lcyAtPiBSZXRyaWVyLXN1cHByaW1lciwgZ2VzdGlvbiBkZXMgdmFsZXVycyBjb25zw6ljdXRpdmVzYCAgICANCiAgLSBgQXBlcsOndSAtPiBBZmZpY2hlci1tYXNxdWVyYC4uLiAgDQoNCjwvYnI+DQoNCiMjIyMgTGEgZ2VzdGlvbiBkZXMgbGlnbmVzOg0KDQotIExhIHPDqWxlY3Rpb24gZGUgbGlnbmVzIHBldXQgc2UgZmFpcmUgcGFyIGxlIGJpYWlzIGRlIGZpbHRyZXMsIGZhY2V0dGVzIGV0IGF1dHJlcyBtYW5pcHVsYXRpb25zIHBlcnNvbm5hbGlzw6llcy4gIA0KLSBJbCBlc3QgYXVzc2kgcG9zc2libGUgZGUgbWFycXVlci/DqXRvaWxlciBkZXMgbGlnbmVzIGVuIGxvdCBvdSBpbmRpdmlkdWVsbGVtZW50IHB1aXMgZGUgY3LDqWVyIHVuZSBmYWNldHRlIHN1ciBsYSBjb2xvbm5lIGBUb3V0ZXNgIHBvdXIgc8OpbGVjdGlvbm5lciBsZXMgbGlnbmVzIG1hcnF1w6llcyAoYHRydWVgKS4gIA0KLSBPbiBwZXV0IGVuc3VpdGUgc3VwcHJpbWVyIGxlcyBsaWduZXMgZmlsdHLDqWVzOiBgVG91dGVzIC0+IMOJZGl0ZXIgbGVzIGxpZ25lcyAtPiBTdXBwcmltZXIgbGVzIGxpZ25lcyBjb3JyZXNwb25kYW50ZXNgLiAgDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlN1cHByaW1lciB1bmUgY29sb25uZTogKiogIA0KLSBTdXIgbGEgY29sb25uZSAqVHlwZSBkJ2luY2lkZW50KiAtPiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IFN1cHByaW1lciBjZXR0ZSBjb2xvbm5lYC4gIA0KDQoqKlN1cHByaW1lciBwbHVzaWV1cnMgY29sb25uZXM6ICoqICANCi0gU3VyIGxhIGNvbG9ubmUgKlRvdXRlcyogLT4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiDDiWRpdGVyL1N1cHByaW1lciBsZXMgY29sb25uZXNgIC0+ICpLRlMqIGV0ICpDQVQqLiAgDQoNCjwvZGl2Pg0KDQoqKioNCg0KDQojIyA1LjUuIEhpc3RvcmlxdWUgKFVuZG8vUmVkbykNCg0KLSBUb3V0ZXMgbGVzIGFjdGlvbnMgc29udCBlbnJlZ2lzdHLDqWVzIChsb2cgZGUgc2VzIG1hbmlwdWxhdGlvbnMpIGV0IHBldXZlbnQgw6p0cmUgYW5udWzDqWVzIGVuIHJlY3VsYW50IMOpdGFwZSBwYXIgw6l0YXBlIGRhbnMgbCdoaXN0b3JpcXVlLiAgDQotIExhIHByZW1pw6hyZSBhY3Rpb24gZCd1biBoaXN0b3JpcXVlIGVzdCBsYSBjcsOpYXRpb24gZHUgcHJvamV0LiAgDQotIFB1aXNxdWUgbCdoaXN0b3JpcXVlIGZhaXQgcGFydGllIGR1IHByb2pldCBlbnJlZ2lzdHLDqSBkYW5zIGxlIGRvc3NpZXIgZGUgdHJhdmFpbCwgaWwgbmUgZGlzcGFyYWl0IHBhcyDDoCBsYSBmZXJtZXR1cmUgZGUgbGEgc2Vzc2lvbi4gDQotIEwnaGlzdG9yaXF1ZSBwZXV0IMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04sIGNvcGllci9jb2xsZXIgZGFucyBub3RlcGFkIGV0IGFwcGxpcXVlciBkZSBub3V2ZWF1LiAgDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjE5LmpwZyl7d2lkdGg9NjAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoqKkF0dGVudGlvbiEqKg0KDQotIFNpIG9uIHJlY3VsZSBkYW5zIGxlIHRlbXBzIGV0IHF1J29uIGZhaXQgdW5lIG1vZGlmaWNhdGlvbiwgbGVzIMOpdGFwZXMgcXVpIHN1aXZlbnQgZGFucyBsJ2hpc3RvcmlxdWUgZGlzcGFyYWlzc2VudCBwb3VyIGRlIGJvbi4gIA0KDQotIExlcyBtYW5pcHVsYXRpb25zIHJlbGF0aXZlcyDDoCBsJ2FmZmljaGFnZSBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdoaXN0b3JpcXVlLCBzZXVsZW1lbnQgbGVzIHRyYW5zZm9ybWF0aW9ucy4gTCdlbnJlZ2lzdHJlbWVudCBhdXRvbWF0aXF1ZSBuZSBjb21wcmVuZCBkb25jIHBhcyBsZXMgZmFjZXR0ZXMgZXQgZmlsdHJlcyAodnVlIGRlIGwnaW50ZXJmYWNlKSAtIHBlcmQgY2UgcXVpIG4nYXBwYXJhaXQgcGFzIGRhbnMgbGUgYETDqWZhaXJlL1JlZmFpcmVgLg0KDQotIEwnw6lkaXRpb24gZGlyZWN0ZSBkYW5zIGxlcyBjZWxsdWxlcyBhcHBhcmFpdCBkYW5zIGwnaGlzdG9yaXF1ZSBtYWlzIG5lIHBldXQgw6p0cmUgZXhwb3J0w6llLiAgDQoNCi0gRmFjZXR0ZXMgZXQgZmlsdHJlcyBzJ2VucmVnaXN0cmVudCBncsOiY2UgYXUgYHBlcm1hbGllbmAuICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyA2LiBNZW51IGV0IGZvbmN0aW9ucw0KDQpPcGVuIFJlZmluZSBwZXJtZXQgZGUgdHJhdmFpbGxlciBkZSAqKmRldXggZmHDp29ucyoqOiAgDQoNCg0KMS4gQXZlYyBsJ2Vuc2VtYmxlIGRlcyAqKmZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzKiogcXVlIGwnb24gcmV0cm91dmUgZGFucyBsZXMgbWVudXMuDQoNCjIuIEVuIHLDqWRpZ2VhbnQgc2VzIHByb3ByZXMgW2V4cHJlc3Npb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zKSBhdmVjIGxlICoqbGFuZ2FnZSBHUkVMKiouICANCg0KPC9icj4NCg0KIyMgNi4xLiBVdGlsaXNlciBsZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXM6DQoNCi0gTGUgbWVudSBldCBsJ2Vuc2VtYmxlIGRlIHNlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcyBhcHBhcmFpc3NlbnQgZW4gY2xpcXVhbnQgc3VyIGxhIGZsw6hjaGUgZGUgbCdpbnRpdHVsw6kgZGUgY2hhcXVlIGNvbG9ubmUuDQoNCi0gTGVzIGZvbmN0aW9ucyBkaXNwb25pYmxlcyBzb3VzIGxlIG1lbnUgZGUgbGEgcHJlbWnDqHJlIGNvbG9ubmUgYFRvdXRlc2Agc2UgZGlzdGluZ3VlbnQgZGVzIGF1dHJlcyBwdWlzcXUnZWxsZXMgcGVybWV0dGVudCBkJ2FwcGxpcXVlciBkZXMgZm9uY3Rpb25zIMOgIGwnZW5zZW1ibGUgZGVzIGNvbG9ubmVzIGR1IGZpY2hpZXI6IE1hcnF1ZXIsIMOpdG9pbGVyLCBzdXBwcmltZXIsIG1hc3F1ZXIuLi4NCg0KPC9icj4NCg0KKipNZW51IGV0IGZvbmN0aW9ucyBkZSBjaGFxdWUgY29sb25uZS12YXJpYWJsZSoqDQoNCg0KIVtdKGltYWdlcy9PUjEyLmpwZyl7d2lkdGg9OTAlfQ0KDQo8L2JyPg0KDQoqKk1lbnUgZXQgZm9uY3Rpb25zIGRlIGxhIGNvbG9ubmUgYFRvdXRlc2AqKg0KDQohW10oaW1hZ2VzL09SMjEuanBnKXt3aWR0aD05MCV9DQoNCjwvYnI+DQoNCioqKg0KDQojIyA2LjIuIMOJY3JpcmUgc2VzIGZvbmN0aW9ucyBhdmVjIEdSRUwNCg0KPC9icj4NCg0KRXhwcmVzc2lvbnMgc2ltaWxhaXJlcyBhdXggZm9ybXVsZXMgRXhjZWwgbWFpcyBxdWkgcydhcHBsaXF1ZW50IGF1eCBjb2xvbm5lcywgbm9uIGF1eCBjZWxsdWxlcywgZXQgcXVpIG5lIHNvbnQgcGFzIHN0b2Nrw6llcyDDoCBtw6ptZSBsZXMgZG9ubsOpZXMgbWFpcyBkYW5zIHVuIHNjcmlwdC4gIA0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMTQuanBnKQ0KDQoNCg0KKipMZSBsYW5nYWdlIEdSRUwgcyd1dGlsaXNlIGRhbnMgZGVzIGZlbsOqdHJlcyBkZSBzeW50YXhlIGFjY2Vzc2libGVzIMOgIHBhcnRpciBkZSBkaWZmw6lyZW50ZXMgZm9uY3Rpb25zIHN1ciBsJ2ludGVyZmFjZSA6KiogIA0KDQotIEVuIGNyw6lhbnQgZGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyA6IGBGYWNldHRlIC0+IEZhY2V0dGUgdGV4dHVlbGxlIHBlcnNvbm5hbGlzw6llYC4gIA0KDQotIEVuIHRyYW5zZm9ybWFudCB1bmUgY29sb25uZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IHRyYW5zZm9ybWVyYCAoYXVzc2kgc291cyBgVG91dGVzIC0+IFRyYW5zZm9ybWVyYCkuICANCg0KLSBFbiBjcsOpYW50IHVuZSBub3V2ZWxsZSBjb2xvbm5lOiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgYmFzw6llIHN1ciBjZXR0ZSBjb2xvbm5lYC4gIA0KDQotIEVuIMOpZGl0YW50IGxhIHN5bnRheGUgZGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIChib3V0b24gYGNoYW5nZXJgIGRhbnMgbGVzIGZhY2V0dGVzKS4gIA0KDQo8L2JyPg0KDQotPiBQb3VyIGRlcyBmaWx0cmVzIGV0IGRlcyB0cmFuc2Zvcm1hdGlvbnMgcGx1cyBjb21wbGV4ZXMsIEdSRUwgcGVybWV0IGwndXRpbGlzYXRpb24gZCdbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIChyZWdleCldKGh0dHBzOi8vcmVnZXgxMDEuY29tLykqKg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyA2LjMuIFRyaWVyIHVuIGZpY2hpZXINCg0KLSBMZXMgZG9ubsOpZXMgYXBwYXJhaXNzZW50IGRhbnMgbCdvcmRyZSBkdSBmaWNoaWVyIG9yaWdpbmFsLg0KLSBQb3VyIG1vZGlmaWVyIGwnb3JkcmUgZCdhcHBhcml0aW9uIGRlcyBvYnNlcnZhdGlvbnMsIGFwcGxpcXVlciB1biBvdSBkZXMgdHJpcyBzdXIgbGVzIGNvbG9ubmVzIGF2ZWMgYFRyaWVyLi4uYA0KLSBQb3VyIGNvbWJpbmVyIHBsdXNpZXVycyB0cmlzIHN1ciBkaWZmw6lyZW50ZXMgY29sb25uZXM6IEZhaXJlIHVuIHRyaWUgc3VyIHVuZSBjb2xvbm5lIHB1aXMgc3VyIHVuZSBhdXRyZSBlbiBtb2RpZmlhbnQgc2kgbsOpY2Vzc2FpcmUgbCdvcHRpb24gYFRyaWVyIHNlbG9uIGNldHRlIHNldWxlIGNvbG9ubmVgLg0KLSBMZXMgdHJpcyBuZSBzb250IHF1ZSB0ZW1wb3JhaXJlcyBldCBuJ2FmZmVjdGVudCBkb25jIHF1ZSBsJ2FmZmljaGFnZS4gUG91ciBxdSdpbHMgc29pZW50IHBlcm1hbmVudHMgKHJlbnVtw6lyb3RhdGlvbiBkZXMgbGlnbmVzKTogYFRyaWVyIC0+IFJldHJpZXIgbGVzIGxpZ25lcyBkZSBmYcOnb24gcGVybWFuZW50ZWAqLiAgDQotIElsIGVzdCBwb3NzaWJsZSBkZSBzdXBwcmltZXIgZXQgZCdpbnZlcnNlciBsZSB0cmkgw6AgcGFydGlyIGRlcyBvcHRpb25zIHN1ciBjaGFxdWUgY29sb25uZSBvdSBncsOiY2Ugw6AgbGEgZm9uY3Rpb24gYFRyaWVyYCBkdSBoYXV0LiAgDQoNCiAqTGUgdHJpIHBlcm1hbmVudCBhZmZlY3RlIHRvdXQgbGUgZmljaGllciwgcGFzIHNldWxlbWVudCBsYSB2dWUgZmlsdHLDqWUuICANCg0KIVtdKGltYWdlcy9PUjYuanBnKSANCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgSm91ciBjYWxlbmRhaXJlYCBlbiBmb3JtYXQgYGRhdGUgYW50w6ljaHJvbm9sb2dpcXVlYC4gIA0KLSBRdWVsbGUgZXN0IGxhIGRlcm5pw6hyZSBkYXRlIGQnaW5jaWRlbnQgZW5yZWdpc3Ryw6llIGRhbnMgbGUgZmljaGllciA/ICANCi0gU3VwcHJpbWVyIGxlIHRyaS4gIA0KPC9kaXY+DQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBUcmllciBsZXMgdmFsZXVycyBkZXMgY2VsbHVsZXMgY29tbWUgdGV4dGUgZGUgbGEgY29sb25uZSBgTW9pcyBDYWxlbmRyaWVyYCAuICAgDQotIFRyaWVyIGxlcyB2YWxldXJzIGRlcyBjZWxsdWxlcyBjb21tZSB0ZXh0ZSBkZSBsYSBjb2xvbm5lIGBKb3VyIGR1IG1vaXNgLiAgDQotIEV4cGxvcmVyIGxlIHLDqXN1bHRhdC4uLiAgIA0KLSBTdXBwcmltZXIgbGUgdHJpIGV0IHJlY29tbWVuY2VyIGxhIHByb2PDqWR1cmUgYXZlYyB1biB0cmkgZGUgZm9ybWF0IG5vbWJyZS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDYuNC4gRmlsdHJlciBsZSB0ZXh0ZQ0KDQotIExhIGZvbmN0aW9uIGBGaWx0cmVyIGxlIHRleHRlYCBwZXJtZXQgZGUgY2hlcmNoZXIgdW5lIG91IGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIGRhbnMgdW5lIG91IHBsdXNpZXVycyB2YXJpYWJsZXMuICANCi0gUGVybWV0IGRlIHJlY2hlcmNoZXIgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgY29sb25uZSBldCBkZSBjb21iaW5lciBkZXMgZmlsdHJlcyBhcHBsaXF1w6lzIHN1ciBwbHVzaWV1cnMgY29sb25uZXMgcG91ciByYWZmaW5lciBsYSByZWNoZXJjaGUuICANCi0gRm9uY3Rpb24gcGx1cyBleHDDqWRpdGl2ZSBxdWUgbGVzIGZhY2V0dGVzIHF1YW5kIG9uIG5lIHZldXQgcXVlIGNoZXJjaGVyIHVuZSBjaGFpbmUgZGUgY2FyYWN0w6hyZXMuICANCi0gTCdhZmZpY2hhZ2UgZGVzIGxpZ25lcyBzZSBsaW1pdGVyYSBhdSBub21icmUgZGUgY2FzIGNvcnJlc3BvbmRhbnRzIGF1eCBjcml0w6hyZXMgZGUgcmVjaGVyY2hlIGluc2NyaXRzIGRhbnMgbGVzIGJvaXRlcyBkZSBmaWx0cmVzLiAgDQotICoqVGFudCBxdWUgbGVzIGZpbHRyZXMgc2Vyb250IGFjdGlmcywgbGVzIGFjdGlvbnMgc3Vic8OpcXVlbnRlcyBzZSBsaW1pdGVyb250IMOgIGNlcyBjYXMgZmlsdHLDqXMuKiogIA0KDQohW10oaW1hZ2VzL09SNy5qcGcpIA0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQoqKkxpbWl0ZXIgbGEgbGlzdGUgYXV4IGNhcyBzdXJ2ZW51cyDDoCBsYSBzdGF0aW9uIEJlcnJpIGVudHJlIG1pZGkgZXQgMTNoLioqICANCg0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqOiAiYmVycmkiICANCi0gRmlsdHJlciBsZSB0ZXh0ZSBzdXIgbGEgY29sb25uZSAqSGV1cmUgZGUgbCdpbmNpZGVudCo6ICIxMiIgIA0KLSBFeHBsb3JlciBsZXMgcsOpc3VsdGF0cyAgDQotIENvbW1lbnQgcydhc3N1cmVyIGQnYXZvaXIgc2V1bGVtZW50IGxlcyBjYXMgc3VydmVudXMgZW50cmUgMTJoIGV0IDEzaD8gQ29tYmllbiBkZSBsaWduZXMgY29ycmVzcG9uZGVudCDDoCBjZXMgY29uZGl0aW9ucz9eWzEyOiBvdSBleHByZXNzaW9uIHJhdGlvbm5lbGxlIF4xMiAvIDQ4IGNhc10gIA0KLSBTdXBwcmltZXIgdG91cyBsZXMgZmlsdHJlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDcuIExlcyBmYWNldHRlcw0KDQojIyA3LjEgQ2FyYWN0w6lyaXN0aXF1ZXMNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL09SMzQuanBnIiAgd2lkdGg9IjYwJSIgLz4NCjwvZGl2Pg0KDQotIExlcyBmYWNldHRlcyBjb25zdGl0dWVudCBsYSBtYXJxdWUgZGUgY29tbWVyY2UgZCdPcGVuUmVmaW5lLCBkJ2/DuSBsZSBsb2dvISANCg0KLSBGb25jdGlvbm5hbGl0w6kgcHVpc3NhbnRlIHF1aSBwZXJtZXQgZCdleHBsb3JlciBldCBkZSBmaWx0cmVyIHNlcyBkb25uw6llcyBlbiBmb25jdGlvbiBkZSBkaWZmw6lyZW50ZXMgY29uZGl0aW9ucy4gIA0KDQotIE4nYWZmZWN0ZW50IHBhcyBkaXJlY3RlbWVudCBsZXMgZG9ubsOpZXMsIHNldWxlbWVudCBsYSBwcsOpc2VudGF0aW9uLiAgDQoNCi0gw4AgbGEgYmFzZSwgdW5lIGZhY2V0dGUgY29ycmVzcG9uZCDDoCBsYSBsaXN0ZSBkZXMgdmFsZXVycyBwb3NzaWJsZXMgZCd1bmUgdmFyaWFibGUgIChldCBkZSBsZXVyIG9jY3VycmVuY2UpIHByw6lzZW50w6llIHNlbG9uIGxlIGZvcm1hdCAoY2hhaW5lLCBudW3DqXJpcXVlLCBkYXRlKS4gIA0KDQotIFBlcm1ldHRlbnQgdW5lIGV4cGxvcmF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZXMgdmFsZXVycyBwb3NzaWJsZXMgZXQgZGUgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzIHBsdXMgw6lsYWJvcsOpZXMgcXVlIGxlcyBmaWx0cmVzLiAgDQoNCi0gT24gcGV1dCBhaW5zaSBpZGVudGlmaWVyIGxlcyB0ZW5kYW5jZXMsIGxlcyByw6lndWxhcml0w6lzLCBsZXMgZXJyZXVycywgbGVzIMOpY2FydHMsIGxlcyByw6lww6l0aXRpb25zIGV0ICBjaWJsZXIgbGVzIHZhbGV1cnMgZGUgc291cy1ncm91cGVzIHByw6ljaXMuICANCg0KLSBDZXMgc291cy1ncm91cGVzIHBldXZlbnQgZW5zdWl0ZSDDqnRyZSDDqWRpdMOpcyBldCBleHBvcnTDqXMgKGJvdXRvbiBgRXhwb3J0ZXJgIGVuIGhhdXQgw6AgZHJvaXRlKS4gDQoNCjwvYnI+DQoNCiMjIyBUeXBlcyBkZSBmYWNldHRlczoNCg0KICAtIExlcyBmYWNldHRlcyBhdXRvbWF0aXPDqWVzICoqWzFdKiouICAgDQogIDwvYnI+DQogIC0gTGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAqKlsyXSoqLiAgDQogIDwvYnI+DQogIC0gSWwgZXN0IGF1c3NpIHBvc3NpYmxlIGRlIGNyw6llciBzZXMgcHJvcHJlcyBmYWNldHRlcyBncsOiY2UgYXUgbGFuZ2FnZSBHUkVMIHBvdXIgZMOpZmluaXIgZGVzIGNvbmRpdGlvbnMgZGUgc8OpbGVjdGlvbi9maWx0cmUgdHLDqHMgcHLDqWNpc2VzICoqWzNdKiogKG9uIHBhcmxlIGVuY29yZSBpY2kgZGUgKmZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyosIG1haXMgZWxsZXMgZG9pdmVudCDDqnRyZSByw6lkaWfDqWVzIG1hbnVlbGxlbWVudCkuDQoNCjwvYnI+DQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIzLmpwZykNCjwvY2VudGVyPiAgDQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQogIC0gKipbOF0qKiBMZSBsaWVuIGBjaGFuZ2VyYCBwZXJtZXQgZCdvdXZyaXIgdW5lICoqZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMKiogcG91ciBtb2RpZmllciBsYSBzeW50YXhlIGRlIGxhIGZhY2V0dGUuICANCiAgLSAqKls5XSoqIFBvdXIgc3VwcHJpbWVyIGxlcyBmYWNldHRlcywgY2xpcXVlciBzdXIgbGUgeCBkZSBjaGFxdWUgZmVuw6p0cmUgb3UgYFRvdXQgc3VwcHJpbWVyYC4gIA0KICAtIFBvdXIgY29uc2VydmVyIGxlcyBmZW7DqnRyZXMgbWFpcyBzdXBwcmltZXIgbGVzIHPDqWxlY3Rpb25zIHF1aSB5IG9udCDDqXTDqSBmYWl0ZXMsIGNsaXF1ZXIgc3VyIGByw6lpbnRpYWxpc2VyYCBzdXIgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHLDqWluaXRpYWxpc2VyYCAqKls5XSoqLiAgDQogIC0gKipbMTBdKiogT3B0aW9uIGBHcm91cGVgOiBPdXRpbHMgcHJvcG9zYW50IGRpZmbDqXJlbnRzIGFsZ29yaXRobWVzIGRlIHNpbWlsYXJpdMOpIHBlcm1ldHRhbnQgZGUgcmVncm91cGVyIGRlcyBjYXTDqWdvcmllcyBzZW1ibGFibGVzLiAgDQo8L2Rpdj4gDQoNCiMjIyBGb3JtYXRzIGRlIGZhY2V0dGVzOg0KDQpPbiByZXRyb3V2ZSDDqWdhbGVtZW50IGRpZmbDqXJlbnRzICoqZm9ybWF0cyBkZSBmYWNldHRlcyoqIC0+IHVuZSBwb3VyIGNoYXF1ZSBmb3JtYXQgZGUgZG9ubsOpZXMgKExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgcHJvcG9zZW50IGF1c3NpIGRlcyBmYWNldHRlcyBib29sw6llbm5lcykuICAgDQoNCg0KIyMjIyAxLiBGYWNldHRlIHRleHR1ZWxsZSAqKls0LTVdKiogDQoNCi0gVHlwZSBkZSBmYWNldHRlIGxlIHBsdXMgc291dmVudCB1dGlsaXPDqS4gICANCi0gUmVncm91cGVudCBkYW5zIGxhIGZlbsOqdHJlIGRlIGdhdWNoZSBsZXMgdmFsZXVycyBkaXN0aW5jdGVzICh0ZXh0dWVsbGVzIG91IG51bcOpcmlxdWVzKSBkZXMgY29sb25uZXMgdm91bHVlcy4gICANCiAgLSBPbiBwZXV0IGZhaXJlIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgdW5lIGNvbG9ubmUgbnVtw6lyaXF1ZSBtYWlzIHBhcyBsJ2ludmVyc2UuICANCiAgLSAyMDAwIHZhbGV1cnMgbWF4aW11bSBwYXIgZMOpZmF1dCBtYWlzIHBldXQgw6p0cmUgbW9kaWZpw6kgZGFucyBsZXMgcHLDqWbDqXJlbmNlcy4gU2kgbGVzIHZhbGV1cnMgc29udCB0cm9wIG5vbWJyZXVzZXMsIGVsbGVzIG5lIHNlcm9udCBwYXMgbGlzdMOpZXMgKHVuIGZpbHRyZSBwb3VycmFpdCDDqnRyZSB1dGlsaXPDqSkuIA0KLSBQZXJtZXR0ZW50IGRlIGNvbWJpbmVyIGRpZmbDqXJlbnRzIGZpbHRyZXMgZW4gc8OpbGVjdGlvbm5hbnQgZGlmZsOpcmVudGVzIHZhbGV1cnMgZCd1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcyAoZXQgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzKS4gICANCiAgLSBDbGlxdWVyIGBpbmNsdXJlYCBvdSBgZXhjbHVyZWAgcG91ciBzw6lsZWN0aW9ubmVyIG91IHN1cHByaW1lciBkZXMgY2hvaXggbXVsdGlwbGVzICoqWzEyXSoqLiAgIA0KICAtIFVuZSBmb2lzIGxhIHPDqWxlY3Rpb24gZmFpdGUsIGwnb3B0aW9uIGBpbnZlcnNlcmAgcGVybWV0IGRlIHPDqWxlY3Rpb25uZXIgdG91dCBTQVVGIGxhIHPDqWxlY3Rpb24gKipbMTFdKiouICAgDQogIC0gUGV1dmVudCDDqnRyZSB0cmnDqWVzIHNlbG9uIGxlIG5vbSBvdSBsZSBjb21wdGUgKG5vbWJyZSBkJ29jY3VycmVuY2VzKS4gICANCi0gUGVybWV0dGVudCAqKmTigJnDqWRpdGVyIGxlcyB2YWxldXJzKiogKGNvbnRlbnUgZGUgY2hhcXVlIGNlbGx1bGUgY29ycmVzcG9uZGFudGUpICoqWzEzXSoqLiAgDQoNCg0KIyMjIyAyLiBGYWNldHRlIG51bcOpcmlxdWUgKipbN10qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIHZhcmlhYmxlIG51bcOpcmlxdWUgYWxsYW50IGRlIGxhIHBsdXMgcGV0aXRlIMOgIGxhIHBsdXMgZ3JhbmRlLiAgDQoNCg0KIyMjIyAzLiBGYWNldHRlIGNocm9ub2xvZ2lxdWUgKipbNl0qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIGNvbG9ubmUgZGF0ZSBlbiBsaWduZSBkdSB0ZW1wcy4gIA0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqRmlsdHJlcioqIA0KDQotIEV4cGxvcmVyIGxlcyB2YWxldXJzIGRlIGxhIHZhcmlhYmxlICpDYXVzZSBwcmltYWlyZSouIFF1ZWxsZSBlc3QgbGEgZGV1eGnDqG1lIHBsdXMgZnLDqXF1ZW50ZT8gDQotIFF1ZWxsZXMgc29udCBsZXMgY2F0w6lnb3JpZXMgZGUgKkNhdXNlIHNlY29uZGFpcmUqIHJlbGnDqWVzIMOgIGxhICpDYXVzZSBwcmltYWlyZSAiQ2xpZW50w6hsZSIqPyAgIA0KLSBRdWVsbGUgZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZT8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuIENvbWJpZW4gZGUgY2FzIGNvcnJlc3BvbmRlbnQgw6AgY2V0dGUgc8OpbGVjdGlvbj8gIA0KLSDDgCBxdWVsICpqb3VyIGRlIGxhIHNlbWFpbmUqIGNldHRlIGNhdXNlIGVzdC1lbGxlIHN1cnZlbnVlIGxlIHBsdXMgc291dmVudD9eW0NsaWVudMOobGUgLyBCbGVzc8OpZSBvdSBtYWxhZGUsIE3DqWZhaXQgdm9sb250YWlyZSwgTnVpc2FuY2UgaW52b2xvbnRhaXJlIC8gTcOpZmFpdCB2b2xvbnRhaXJlIDc4MS8gNV0gICANCi0gUsOpaW5pdGlhbGlzZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCg0KKirDiWRpdGVyKiogIA0KDQotIERhbnMgbGEgZmFjZXR0ZSAqQ2F1c2UgcHJpbWFpcmUqLCByZW5vbW1lciBsYSB2YWxldXIgImF1dHJlIiBwb3VyIHF1J2VsbGUgc29pdCBmdXNpb25uw6llIMOgIGxhIHZhbGV1ciAiQXV0cmVzIi4gIA0KLSBTdXBwcmltZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKkZpbHRyZXIqKiANCg0KLSBRdWVsIGVzdCBsZSAqc3ltcHRvbWUqIGxlIHBsdXMgZnLDqXF1ZW50PyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gIA0KLSBDZXMgw6l2w6luZW1lbnRzIG9udC1pbHMgbsOpY2Vzc2l0w6kgdW5lICrDqXZhY3VhdGlvbio/XltDbGllbnTDqGxlIC8gTGlnbmUgb3JhbmdlIC8gT3VpIDE3XSAgICAgDQoNCioqw4lkaXRlcioqICANCg0KLSDDiWRpdGVyIGxhIHZhcmlhYmxlICrDqXZhY3VhdGlvbiogZGUgZmHDp29uIMOgIGNlIHF1J2lsIG4neSBhaXQgcXVlICoqZGV1eCB2YWxldXJzKiogcG9zc2libGVzOiBPdWkgZXQgTm9uLiAgICANCg0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDcuMi4gTGVzIHJlZ3JvdXBlbWVudHMgKGNsdXN0ZXJpbmcpDQoNCi0gRm9uY3Rpb24gcXVpIHBlcm1ldCBkJ2lkZW50aWZpZXIgZGFucyB1bmUgY29sb25uZSBsZXMgdmFsZXVycyBkaXN0aW5jdGVzIHF1aSBwb3VycmFpZW50IGF2b2lyIGxhIG3Dqm1lIHNpZ25pZmljYXRpb24gb3UgcXVpIHBvdXJyYWllbnQgw6p0cmUgcmVncm91cMOpZXMgZGFucyB1bmUgbcOqbWUgY2F0w6lnb3JpZSA9ICJ2YXJpYXRpb25zIHN1ciBsZSBtw6ptZSB0aMOobWUiIMOpdmFsdcOpZXMgZW4gZm9uY3Rpb24gZGUgW2RpZmbDqXJlbnRzIGFsZ29yaXRobWVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvQ2x1c3RlcmluZy1Jbi1EZXB0aCkuIA0KDQotIENoYXF1ZSBzdWdnZXN0aW9uIGRvaXQgw6p0cmUgYXBwcm91dsOpZSBpbmRpdmlkdWVsbGVtZW50IHBvdXIgcXVlIGxlcyBtb2RpZmljYXRpb25zIHMnYXBwbGlxdWVudCAobGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIG5lIHNvbnQgcGFzIG7DqWNlc3NhaXJlbWVudCBwZXJ0aW5lbnRzKS4NCg0KLSBPcGVuUmVmaW5lIHByb3Bvc2UgZGVzICpjbHVzdGVycyogc2Vsb24gZGlmZsOpcmVudGVzIG3DqXRob2RlcyBwbHVzIG91IG1vaW5zIMOpbGFib3LDqWVzICgqUHJvY2hlIHZvaXNpbiogcHJlbmQgcGx1cyBkZSBtw6ltb2lyZSkgcXVpIHBlcm1ldHRlbnQgZGUgcmVncm91cGVyIGxlcyB2YWxldXJzIHNpbWlsYWlyZXMgZXQgcHJvcG9zZW50IGRlcyBtYXRjaHMgcG9zc2libGVzICgqZnV6enkgbWF0Y2hpbmcqKTogcGFyIGV4ZW1wbGUgKmVtcHJlaW50ZSogZXN0IHBsdXMgY29uc2VydmF0ZXVyIChkaXN0aW5ndWUgY2Fzc2UsIGVzcGFjZXMsIG9yZHJlLCByw6lww6l0aXRpb24sIHBvbmN0dWF0aW9uLi4uKSwgKm5ncmFtKiBlc3QgcGx1cyBmbGV4aWJsZSAobcOqbWVzIGNhcmFjdMOocmVzKSwgKk1ldGFwaG9uZTMqIGVzdCBsZSBwbHVzICJsaWLDqXJhbCIgKG3Dqm1lIHByb25vbmNpYXRpb24pLg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW5lIGZhY2V0dGUgdGV4dHVlbGxlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqLiAgDQotIENsaXF1ZXIgc3VyIGBHcm91cGVgIGV0IGV4cGxvcmVyIGxlcyByZWdyb3VwZW1lbnRzIGVuIGZvbmN0aW9uIGRlcyBkaWZmw6lyZW50cyBhbGdvcml0aG1lcy4gIA0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDcuMy4gTGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyANCg0KDQotIEZvbmN0aW9ubmVudCBjb21tZSBkZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcyBzYXVmIHF1J29uIG5lIHBldXQgw6lkaXRlciBlbiBmb25jdGlvbiBkZSBjZXMgcsOpc3VsdGF0cyBjYXIgZWxsZXMgcHLDqXNlbnRlbnQgZGVzIGRvbm7DqWVzIG1vZGlmacOpZXMgZW4gbcOpbW9pcmUuDQoNCi0gT250IMOpdMOpIGTDqXZlbG9wcMOpZXMgZXQgYXV0b21hdGlzw6llcyBhZmluIGQnZXhwbG9yZXIgZGVzIGFzcGVjdHMgcHLDqWNpcyBkZXMgZG9ubsOpZXMgc2FucyBhdm9pciDDoCBsZXMgIHLDqWRpZ2VyIGVuIHN5bnRheGUgR1JFTDogDQoNCiAgLSBgRmFjZXR0ZSBwYXIgbW90YCA6IERpdmlzZSBjaGFxdWUgbW90IChzw6lwYXLDqSBkJ3VuIGVzcGFjZSkgZCd1bmUgY29sb25uZSBldCBsZXMgcHLDqXNlbnRlIGVuIGxpc3RlIGRlIHZhbGV1cnMgZGlzdGluY3RlcyBbdmFsdWUuc3BsaXQoIiAiKV0uDQogIA0KICAtIGBGYWNldHRlIGRvdWJsb25zYDogdmFsZXVycyBib29sw6llbm5lcyBpbmRpcXVhbnQgc2kgbGVzIHZhbGV1cnMgc29udCB1bmlxdWVzIChmYWxzZSkgb3Ugbm9uICh0cnVlKSBbZmFjZXRDb3VudCh2YWx1ZSwgJ3ZhbHVlJywgJ1N5bXB0b21lJykgPiAxXS4gIA0KICANCiAgLSBgRmFjZXR0ZXMgbG9nYXJpdGhtaXF1ZXNgOiBtb2RpZmljYXRpb24gbG9nYXJpdGhtaXF1ZSBkZSB2YWxldXJzIG51bcOpcmlxdWVzIFt2YWx1ZS5sb2coKV0uDQogIA0KICAtIGBGYWNldHRlIGxvbmd1ZXVyIGRlIHRleHRlYDogbGlzdGUgbGUgbm9tYnJlIGRlIGNhcmFjdMOocmVzIGR1IGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUgW3ZhbHVlLmxlbmd0aCgpXS4NCiAgDQogIC0gRmFjZXR0ZXMgcGVybWV0dGFudCBkJ2V4cGxvcmVyIGxlcyB2YWxldXJzIGQnYGVycmV1cmAsIGBudWxsZXNgLCBgdmlkZXNgLi4uIFtpc0VtcHR5U3RyaW5nKHZhbHVlKV0NCg0KKioqIA0KDQojIDguICBUcmFuc2Zvcm1hdGlvbnMNCg0KLSBPcGVuUmVmaW5lIHBlcm1ldCBkJ2V4cGxvcmVyIG1haXMgYXVzc2kgZGUgbW9kaWZpZXIgc2VzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgdG91Y2hlciBhdSBjb250ZW51IGRlIGNlbGx1bGVzIG1hbnVlbGxlbWVudC4gIA0KDQotIENvbW1lIHBvdXIgbGVzIGZhY2V0dGVzLCBsZXMgZm9uY3Rpb25zIGRlIHRyYW5zZm9ybWF0aW9uIHBldXZlbnQgc2UgZmFpcmUgZGUgZGV1eCBmYcOnb25zOiAgICANCg0KICAxLiBUcmFuc2Zvcm1hdGlvbnMgYXV0b21hdGlzw6llcyAoYFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgKSAqKlsyXSoqOiBmb25jdGlvbnMgcGVybWV0dGFudCBkJ2FwcGxpcXVlciBkZXMgbW9kaWZpY2F0aW9ucyBjb3VyYW50ZXMgc3VyIGxlIGZvcm1hdCBldCBsYSBzdHJ1Y3R1cmUgZGVzIGNlbGx1bGVzL2NvbG9ubmVzLiAgDQogIA0KICAyLiBUcmFuc2Zvcm1hdGlvbnMgbWFudWVsbGVzIGRhbnMgbGEgZmVuw6p0cmUgR1JFTCAqKlsxXSoqIGFmaW4gZCdhbGxlciBiZWF1Y291cCBwbHVzIGxvaW4uICANCiAgDQoNCiFbXShpbWFnZXMvT1IyNC5qcGcpDQoNCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NClBvdXIgdm9pciBsYSBzeW50YXhlIGNvcnJlc3BvbmRhbnQgw6AgY2hhcXVlIGZvbmN0aW9uIGRlIGB0cmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCwgYXBwbGlxdWVyIGxhIGZvbmN0aW9uIHN1ciB1bmUgY29sb25uZSBwdWlzIGFsbGVyIHZvaXIgbCdoaXN0b3JpcXVlLiBQYXIgZXhlbXBsZTogYHZhbHVlLnRvTnVtYmVyKClgLCBgdmFsdWUudG9UaXRsZWNhc2UoKWAsIGB2YWx1ZS50b051bWJlcigpYCwgYHZhbHVlLnRvVXBwZXJjYXNlKClgLCBgdmFsdWUudHJpbSgpYC4uLiA8L2Rpdj4NCg0KKioqIA0KDQoNCiMjIDguMS4gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIG11bHRpdmFyacOpZXMNCg0KLSAqKkRldXggb3B0aW9uczogKiogIA0KICAxLiBFbiBkaXZpc2FudCBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlbiAqKnBsdXNpZXVycyBjb2xvbm5lcyoqOiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzYCAgDQogIDIuIEVuIGRpdmlzYW50IGxlIGNvbnRlbnUgc3VyICoqcGx1c2lldXJzIGxpZ25lcyoqOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gRGl2aXNlciBsZXMgY2VsbHVsZXMgbXVsdGl2YXJpw6llc2AgIA0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMzcuanBnKSAgDQoNCi0gTGEgcHJlbWnDqHJlIG9wdGlvbiBlc3QgbGEgcGx1cyBmcsOpcXVlbnRlLiANCi0gTGEgZGV1eGnDqG1lIG9wdGlvbiBhdXJhIHVuIGVmZmV0IGltcG9ydGFudCBzdXIgbGEgc3RydWN0dXJlIGRlcyBvYnNlcnZhdGlvbnMgcHVpc3F1J2VsbGUgbXVsdGlwbGllcmEgbGUgbm9tYnJlIGRlIGxpZ25lcyBwYXIgY2FzIChjZSBxdWkgbsOpY2Vzc2l0ZXJhIGRlIHBhc3NlciDDoCBsYSB2dWUgcGFyIGBlbnRyw6llc2ApLg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KVW5pZm9ybWlzZXIgZXQgZGl2aXNlciBsZSBjb250ZW51IGRlIGxhIHZhcmlhYmxlICpMaWduZSoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqVW5pZm9ybWlzZXIgbGUgbm9tIGRlcyBsaWduZXM6KiogIA0KDQotIENyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBMaWduZS4gDQoNCi0gRGV1eCBwcm9ibMOobWVzIHNlIHBvc2VudDogMSkgbGVzIG5vbXMgZGUgbGlnbmVzIG5vbiB1bmlmb3JtZXMgZXQgMikgbGVzIHZhbGV1cnMgbXVsdGlwbGVzLiAgDQoNCi0gTm91cyBjaG9pc2lzc29ucyBkJ3VuaWZvcm1pc2VyIGxlcyB2YWxldXJzIGVuIHV0aWxpc2FudCBsZXMgbnVtw6lyb3MgZGUgbGlnbmVzIGV0IGVuIHN1cHByaW1hbnQgbGUgbW90IExpZ25lLiAgDQoNCi0gRXhwbG9yZXIgZXQgYWNjZXB0ZXIgbGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIGF2ZWMgbGEgZm9uY3Rpb24gYEdyb3VwZWAuICANCg0KLSBTdXBwcmltZXIgbGUgbW90IGxpZ25lOiAgDQoNCiAgLSBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gcmVtcGxhY2VyYCAtPiAiTGlnbmUiIHBhcjogbmUgcmllbiBzYWlzaXIgZGFucyBsJ2VuY2FkcsOpLiAgICANCg0KDQotIENsaXF1ZXIgZW5zdWl0ZSBkaXJlY3RlbWVudCBzdXIgYGVkaXRgIHN1ciB1bmUgY2VsbHVsZSBkZSBsYSBjb2xvbm5lIGRlICpMaWduZSogLT4gcmVtYXJxdWVyIGxhIHByw6lzZW5jZSBkJ3VuIGVzcGFjZSwgc3VwcHJpbWVyIGwnZXNwYWNlIGV0IGZlcm1lci4gDQoNCi0gUmFmcmFpY2hpciBsYSBmYWNldHRlIGV0IG9ic2VydmVyIGwnaW1wYWN0IC0gbGVzIGVzcGFjZXMgcGV1dmVudCDDqnRyZSBzdXBwcmltw6lzIGdyw6JjZSDDoCBsYSBmb25jdGlvbjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gU3VwcHJpbWVyIGxlcyBlc3BhY2VzIGRlIGTDqWJ1dCBldCBkZSBmaW5gLiANCi0gUmVtcGxhY2VyIGxlcyBjb3VsZXVycyBkZSBsaWduZSBwYXIgbGV1ciBudW3DqXJvIGRpcmVjdGVtZW50IGRhbnMgbGEgZmFjZXR0ZS4gICANCjwvZGl2Pg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqRGl2aXNlciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlbiBjcsOpYW50IGRlcyBjb2xvbm5lcyBhdmVjIHVuZSBzZXVsZSB2YWxldXIgICoqDQoNCi0gRGFucyBsYSBmYWNldHRlLCByZW1wbGFjZXIgbGVzICItIiBwYXIgZGVzICIsIi4gICAgDQoNCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2A6DQogIC0gRMOpZmluaXIgbGUgc8OpcGFyYXRldXIgIiwiIChjZWx1aS1jaSBkaXNwYXJhaXRyYSkuICANCiAgLSBEw6ljb2NoZXIgbGVzIG9wdGlvbnMgIkRldmluZXIiIGV0ICJTdXBwcmltZXIiLiAgDQotIExlcyBub3V2ZWxsZXMgY29sb25uZXMgcmVwcmVuZHJvbnQgbGUgbm9tIGRlIGwnb3JpZ2luYWwgbnVtw6lyb3TDqS4gTGVzIHJlbm9tbWVyOiBwcmVtaWVyZSwgZGV1eGllbWUsIHRyb2lzaWVtZSwgcXVhdHJpZW1lLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkRpdmlzZXIgcGFyIGxlcyBsb25ndWV1cnMgZGUgY2hhbXBzIGxhIGNvbG9ubmUgKk51bcOpcm8gZCdpbmNpZGVudCogcG91ciBlbiBjcsOpZXIgZGV1eCBub3V2ZWxsZXM6ICANCiAgMS4gVW5lIGNvbG9ubmUgY29udGVuYW50IGxlIHByZW1pZXIgY2FyYWN0w6hyZSBpbmRpcXVhbnQgbGUgdHlwZSBkJ2luY2lkZW50LCBzb2l0IFQgKHRyYWluKSBvdSBTIChzZXJ2aWNlKS4gIA0KICAyLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbCdlbnNlbWJsZSBkZXMgY2FyYWN0w6hyZXMgbnVtw6lyaXF1ZXMgaW5kaXF1YW50IGxlIG51bcOpcm8gZCdpbmNpZGVudC4gIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipWw6lyaWZpY2F0aW9ucyBwcsOpYWxhYmxlczoqKg0KICAxLiBWw6lyaWZpZXIgcXUnaWwgbid5IGEgcGFzIGRlIGRvdWJsb24gZGFucyBjZXR0ZSBjb2xvbm5lOiBgRmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIC0+IEZhY2V0dGUgZG91YmxvbmAgLT4gUXVlbCBlc3QgbGUgcHJvYmzDqG1lPyAgQ2xpcXVlciBzdXIgYENoYW5nZXJgIGV0IGFuYWx5c2VyIGwnZXhwcmVzc2lvbi4gIA0KICAyLiBWw6lyaWZpZXIgbGEgbG9uZ3VldXIgZGUgY2hhcXVlIGNhczogIGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBsb25ndWV1ciBkdSB0ZXh0ZWAuICAgIA0KDQoqKkRpdmlzZXIgbGEgY29sb25uZToqKiAgDQotIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXMgc2Vsb24gbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHNgIDogMSwgOC4gICAgDQotIETDqWNvY2hlciA6IGRldmluZXIgbGUgdHlwZSBkZSBjZWxsdWxlIGV0IFN1cHByaW1lciBjZXR0ZSBjb2xvbm5lLiAgICANCi0gUmVub21tZXIgbGVzIGNvbG9ubmVzIDogVHlwZSBldCBJRC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMjIDguMi4gRnVzaW9ubmVyIGxlIGNvbnRlbnUgZGUgcGx1c2lldXJzIGNvbG9ubmVzDQoNCiMjIEV4ZXJjaWNlICAgDQoNCk5vdXMgc291aGFpdG9ucyBjYWxjdWxlciBsYSBkdXLDqWUgZGVzIGluY2lkZW50cyAobsOpY2Vzc2l0ZSBsJ3V0aWxpc2F0aW9uIGRlIEdSRUwpLiBQb3VyIGNlIGZhaXJlIG5vdXMgY3LDqWVyb25zIGRldXggY29sb25uZXMgcG91ciBlbnN1aXRlIGNhbGN1bGVyIGxhIGRpZmbDqXJlbmNlIGVudHJlIGxlcyBkZXV4OiAgICANCi0gKipUcmFuc2Zvcm1hdGlvbiBzaW1wbGUgYXV0b21hdGlzw6llKio6IENyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBmdXNpb25uYW50IGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Ki4gIA0KLSAqKlRyYW5zZm9ybWF0aW9uIGF2YW5jw6llIEdSRUwqKiAocGV1dCDDqnRyZSByw6lhbGlzw6llIGRlIGZhw6dvbiBhdXRvbWF0aXPDqWUpOiBDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCkxvcnNxdWUgbCdvbiBmdXNpb25uZSBkZXMgY29sb25uZXMsIGlsIGZhdXQgcG9ydGVyIHVuZSBhdHRlbnRpb24gcGFydGljdWxpw6hyZSBhdSBzw6lwYXJhdGV1ciBjaG9pc2kuIE5lIHBhcyB1dGlsaXNlciB1biBjYXJhY3TDqHJlIHF1aSBwb3VycmFpdCBmYWlyZSBwYXJ0aWUgZHUgY29udGVudSAoZXg6ICwpIG91IHF1aSBzZXJ2aXJhIMOgIGRpdmlzZXIgbGVzIGNvbG9ubmVzICguY3N2KQ0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCjEuICoqRm9uY3Rpb24gYXV0b21hdGlzw6llKiogLT4gRnVzaW9ubmVyIGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Kg0KPC9kaXY+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEFubsOpZSBjaXZpbGUgLT4gYMOJZGl0ZXIgbGEgY29sb25uZWAgLT4gYEpvaW5kcmUgbGVzIGNvbG9ubmVzYC4gICAgDQotIEpvaW5kcmUgZGVzIGNvbG9ubmVzIC0+IENvY2hlciBsZXMgY29sb25uZXMgdm91bHVlcyBldCBsZXMgdHJpZXIgc2Vsb24gbCdvcmRyZSB2b3VsdSBkYW5zIGxhIG5vdXZlbGxlIHZhbGV1ci4gIA0KLSBTw6lwYXJhdGV1ciBlbnRyZSBsZSBjb250ZW51IGRlIGNoYXF1ZSBjb2xvbm5lOiAiLSIuICAgIA0KLSDDiWNyaXJlIGxlIHLDqXN1bHRhdCBkYW5zIHVuZSBub3V2ZWxsZSBjb2xvbm5lIG5vbW3DqWU6ICpEYXRlKi4gICAgDQoNCi0gVHJhbnNmb3JtZXIgZW4gZm9ybWF0IGRhdGU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgLiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KMi4gKipGZW7DqnRyZSBHUkVMKiogLT4gRnVzaW9ubmVyIGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSByZXByaXNlKg0KPC9kaXY+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEFubsOpZSBjaXZpbGUgLT4gw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZTogIA0KDQpgY2VsbHNbIkFubsOpZSBjaXZpbGUiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJNb2lzIGNhbGVuZHJpZXIiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJKb3VyIGR1IG1vaXMiXS52YWx1ZSArICIgIiArICBjZWxsc1siSGV1cmUgZGUgbCdpbmNpZGVudCJdLnZhbHVlYC4gIA0KDQotIFbDqXJpZmllciBsYSB0cmFuc2Zvcm1hdGlvbiBhdmVjIHVuZSBmYWNldHRlIGB2YWx1ZS50eXBlKClgLiAgDQoNCi0gUmVjb21tZW5jZXIgbGEgam9pbnR1cmUgcG91ciBjcsOpZXIgdW5lIGNvbG9ubmUgYXZlYyBsYSBkYXRlLWhldXJlIGRlIGZpbiBkZSBsJ2luY2lkZW50DQpgY2VsbHNbIkFubsOpZSBjaXZpbGUiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJNb2lzIGNhbGVuZHJpZXIiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJKb3VyIGR1IG1vaXMiXS52YWx1ZSArICIgIiArICBjZWxsc1siSGV1cmUgZGUgbCdpbmNpZGVudCJdLnZhbHVlYC4gIA0KDQotIFRyYW5zZm9ybWVyIGVuIGZvcm1hdCBkYXRlOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDYWxjdWxlciBsYSBkdXLDqWUgZGUgbCdpbmNpZGVudCAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIHZpZGU6ICANCmDDiWRpdGVyIGxhIGNvbG9ubmUgPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmUgYCAtPiBDaG9pc2lyIHVuIG5vdXZlYXUgbm9tIGV0IGxlIGNvbnRlbnU6ICIiLiAgDQoNCi0gUG91ciBjYWxjdWxlciB1bmUgZGlmZsOpcmVuY2UgZW50cmUgZGF0ZTogYGRpZmYoZGF0ZTEsIGRhdGUyLCAicmVzdWx0cyBmb3JtYXQiKWAuICAgIA0KDQpgZGlmZihjZWxsc1snZGF0ZTInXS52YWx1ZSxjZWxsc1snZGF0ZTEnXS52YWx1ZSwgJ21pbnV0ZXMnKWAuICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMgOS4gTGUgbGFuZ2FnZSBHUkVMIA0KDQoNCi0gKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSogDQotIExhbmdhZ2Ugc2ltaWxhaXJlIMOgIGphdmFzY3JpcHQgZXQgZm9ybXVsZXMgZXhjZWwuICAgIA0KLSBQZXJtZXQgbGEgcsOpZGFjdGlvbiBkJ2V4cHJlc3Npb25zIHZpc2FudCDDoCBtYW5pcHVsZXIvdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZS4gIA0KKFZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsKSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpICANCi0gTGFuZ2FnZSBjb21wb3PDqSBkZSBbZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMpIGV0IGQnW29iamV0c10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyN2YXJpYWJsZXMpLg0KDQo8L2JyPg0KDQojIyAgOS4xLiBHUkVMIC0gUHJpbmNpcGVzIGRlIGJhc2UgDQoNCiMjIyMgVXRpbGlzZSB1bmUgc3ludGF4ZSBwYXJ0aWN1bGnDqHJlIHBvdXIgY2libGVyIGxlcyBvYmpldHMgKHZhcmlhYmxlcyk6ICANCi0gQ29udGVudSBkZSBjb2xvbm5lIGFjdHVlbGxlOiBgdmFsdWVgLiAgICAgDQotIENvbnRlbnUgZCd1bmUgYXV0cmUgY29sb25uZTogYGNlbGxzWydub20tY29sb25uZSddLnZhbHVlYC4gICAgDQotIENvbnRlbnUgdGV4dHVlbDogImd1aWxsZW1ldCBzaW1wbGUgb3UgZG91YmxlIi4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGV1eCBmb3JtYXRzIGRlIG5vdGF0aW9uOiAgDQotIEltYnJpcXXDqWU6ICh0cmltKHRvTG93ZXJjYXNlKHZhbHVlKSkuICAgIA0KLSAqKlPDqXF1ZW50aWVsbGUqKjogdmFsdWUudG9Mb3dlcmNhc2UoKS50cmltKCkgKHBsdXMgZmFjaWxlIMOgIGxpcmUpLiAgICANCg0KPC9icj4NCg0KIyMjIyBEaWZmw6lyZW50cyB0eXBlcyBkZSBmb25jdGlvbnM6ICANCi0gTGVzIGZvbmN0aW9ucyBldCBsZXVyIGNvbXBvcnRlbWVudCBkw6lwZW5kcm9udCBkdSB0eXBlIGRlIGRvbm7DqWVzIG1hbmlwdWzDqWVzLiAgDQotIFtDZXJ0YWluZXMgZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMjc2xpY2VhLW4tZnJvbS1uLXRvLW9wdGlvbmFsKSBwZXJtZXR0ZW50IGRlIHRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgZW4gYGFycmF5c2AgKGxpc3RlIGQnw6lsw6ltZW50cykgZXQgZGUgbGVzIG1hbmlwdWxlci4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyNyZWd1bGFyLWV4cHJlc3Npb25zKSBwZXJtZXR0ZW50IGQndXRpbGlzZXIgbGVzIFtleHByZXNzaW9ucyByw6lndWxpw6hyZXNdKCNleHByZXNzaW9uKS4gIA0KDQo8L2JyPg0KDQojIyMjIERpZmbDqXJlbnRzIHR5cGVzIGQnb3DDqXJhdGV1cnM6ICANClNlbG9uIGxlIGZvcm1hdCwgZGlmZsOpcmVudHMgdHlwZXMgZCcqKm9ww6lyYXRldXJzKiogcGV1dmVudCDDqnRyZSB1dGlsaXPDqXMgZW50cmUgbGVzIHZhbGV1cnM6ICANCgktIE9ww6lyYXRldXJzIGFyaXRobcOpdGlxdWVzOiArLCAtLCAqLCAvICANCgktIE9ww6lyYXRldXJzIGRlIGNvbXBhcmFpc29uOiA9PSwgPiwgPCAgDQogIA0KKipQYXIgZXhlbXBsZToqKg0KDQotIExlICIrIiBlbnRyZSBkZXV4IGNvbnRlbnVzIG51bcOpcmlxdWVzID0gc29tbWUNCg0KIVtdKGltYWdlcy9PUjMwLmpwZykNCg0KLSBMZSAiKyIgYXZlYyB1biBjb250ZW51IHRleHR1ZWwgPSBjb25jYXTDqW5hdGlvbg0KDQohW10oaW1hZ2VzL09SMzEuanBnKQ0KDQo8L2JyPg0KDQoqKiogIA0KDQojIyAgOS4yLiBHUkVMIC0gTCdpbmRleGF0aW9uLCBsYSBzw6lsZWN0aW9uIGV0IGxhIG1hbmlwdWxhdGlvbiBkJ8OpbMOpbWVudHM6ICANCg0KLSBDaGFxdWUgY2FyYWN0w6hyZSBjb21wb3NhbnQgbGEgdmFsZXVyIGQndW5lIGNlbGx1bGUgZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KS4NCi0gQ2hhcXVlIMOpbMOpbWVudCBkJ3VuICphcnJheSogZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KSBldCBwZXV0IMOqdHJlIGNpYmzDqSBncsOiY2UgYXV4IGBbIF1gLiAgDQotIEwnb3DDqXJhdGV1ciBgWyBdYCBwZXJtZXQgZGUgY2libGVyL3PDqWxlY3Rpb25uZXIgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgb3UgZGVzIHNvdXMtw6lsw6ltZW50cyBzcMOpY2lmaXF1ZXMuIA0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHNwbGl0KCkgICANCg0KPiBgdmFsdWVbMCw4XWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID8gICANCj4gYHZhbHVlLnNwbGl0KCIoIilbMV1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdLnNwbGl0KCIpIilbMF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICANCj4gYHZhbHVlWzBdICsgdmFsdWVbM10gKyB2YWx1ZVs3XWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID9eW01vbnRyw6lhbCAvIFF1w6liZWMpIC8gUXXDqWJlYyAvIE10bF0gIA0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZSAtIEZvbmN0aW9uIHJlcGxhY2UoKSAgDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCmBJU0JOOiA5NzgtMi0xMy0wODI5MzAtMGANCg0KQ29uc2VydmVyIHNldWxlbWVudCBsZSBjaGlmZnJlIGRlIGwnSVNCTiBzYW5zIGxlcyB0cmFpdHMgZCd1bmlvbj9eW3ZhbHVlWzUsMjRdLnJlcGxhY2UoIi0iLCAiIildDQoNCkluZGljZXMgOiAgDQoNCi0gRGV1eCBmYcOnb25zIGRlIGZhaXJlOiBgdmFsdWVbXWAgT1UgYHZhbHVlLnNwbGl0KClgDQotIGByZXBsYWNlKClgIChpbCBmYXV0IHJlbXBsYWNlciAicXVlbHF1ZSBjaG9zZSIsICJwYXIgbGUgdmlkZSIpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHNsaWNlKCkgIA0KDQpgTWFydGlub2xsaSwgUGFzY2FsOyBHYWJyaWVsbGksIE5pbm87IEZvcnRpZXIsIENhdGhlcmluZTsgQmVsbGVtYXJlLCBQYXNjYWxlYA0KDQohW10oaW1hZ2VzL09SMjUuanBnKQ0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIikuc2xpY2UoMSkuam9pbigiXG4iKWAgDQoNCiFbXShpbWFnZXMvT1IzOS5qcGcpDQoNCi0gYHNwbGl0KClgOiBkaXZpc2VyIGxhIGNlbGx1bGUgZW4gw6lsw6ltZW50cyBkaXN0aW5jdHMgc3VyIGxhIGJhc2UgZHUgc8OpcGFyYXRldXIgOw0KLSBgc2xpY2UoKWAgOiBjb25zZXJ2ZXIgbGVzIMOpbMOpbWVudHMgw6AgcGFydGlyIGRlIGwnw6lsw6ltZW50IDEgZG9uYyBzdXBwcmltZSBsZSAwLiANCi0gYGpvaW4oKWA6IGpvaW5kcmUgYXZlYyBsZSBzw6lwYXJhdGV1ciA7DQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlIC0gRm9uY3Rpb24gc29ydCgpICANCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KTWV0dHJlIGxlcyBub21zIGVuIG9yZHJlIGFscGhhYsOpdGlxdWUgZXQgbGVzIGpvaW5kcmUgYXZlYyB1bmUgdmlyZ3VsZS5eW3ZhbHVlLnNwbGl0KCI7ICIpLnNvcnQoKS5qb2luKCIsICIpXQ0KDQpJbmRpY2VzOiAgDQoNCi0gYHNwbGl0KClgOiBkaXZpc2VyIGxhIGNlbGx1bGUgZW4gw6lsw6ltZW50cyBkaXN0aW5jdHMgc3VyIGxhIGJhc2UgZHUgc8OpcGFyYXRldXIgIA0KDQotIGBzb3J0KClgOiB0cmllciBsZXMgw6lsw6ltZW50cyAocmVzdGUgdmlkZSkNCg0KLSBgam9pbigpYDogam9pbmRyZSBhdmVjIGxlIHPDqXBhcmF0ZXVyICANCg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHJldmVyc2UoKSAgDQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgiOyAiKVsxXS5zcGxpdCgiLCAiKS5yZXZlcnNlKCkuam9pbigiICIpICsgIiBlc3QgbGUgbWVpbGxldXIiYCANCg0KIVtdKGltYWdlcy9PUjM4LmpwZykNCg0KLSBgc3BsaXQoKWA6IGRpdmlzZSBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsgZXQgcmV0aWVudCBsZSBkZXV4acOobWUgw6lsw6ltZW50DQotIGBzcGxpdCgpYDogZGl2aXNlIGNldCDDqWzDqW1lbnQgc3VyIGxlIHPDqXBhcmF0ZXVyICwNCi0gYHJldmVyc2UoKWA6IGludmVyc2UgbCdvcmRyZSBkZXMgZGV1eCDDqWzDqW1lbnRzDQotIGBqb2luKClgOiByYXR0YWNoZSBsZXMgZGV1eCDDqWzDqW1lbnRzIGRpdmlzw6kgYXZlYyB1biBlc3BhY2UNCg0KPC9icj4NCg0KKioqDQoNCiMjIDkuMy4gQ3LDqWVyIGRlcyBmYWNldHRlcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2VzDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBwb3VyIGxpc3RlciBsZXMgY2FzIHNlbG9uIGwnKmhldXJlIGRlIGwnaW5jaWRlbnQqIHNldWxlbWVudCwgc2FucyBsZXMgbWludXRlcyAoMiBwcmVtaWVycyBjYXJhY3TDqHJlcykuIENvbW1lbnQgZmFpcmUgYWZmaWNoZXIgbGVzIG1pbnV0ZXMgc2V1bGVtZW50P15bdmFsdWVbMyw1XSBvdSB2YWx1ZS5zdWJzdHJpbmcoMyldIA0KDQpgdmFsdWVbMCwyXWAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KiBwb3VyIGlkZW50aWZpZXIgbGVzIGNhcyBkb250IGxhIHZhbGV1ciBjb21tZW5jZSBwYXIgIkPDtHRlIiAgDQoNCmB2YWx1ZS5zdGFydHNXaXRoKOKAnEPDtHRl4oCdKWAgICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgZGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogZXN0IGxhIG3Dqm1lIHF1ZSBkYW5zIGxhIGNvbG9ubmUgKkNhdXNlIHNlY29uZGFpcmUqDQoNCmB2YWx1ZSA9PSBjZWxsc1siQ2F1c2Ugc2Vjb25kYWlyZSJdLnZhbHVlYCAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgOS40LiBSZWNoZXJjaGVyL3JlbXBsYWNlciB1biBjYXJhY3TDqHJlIGRhbnMgdG91dGVzIGxlcyBjb2xvbm5lcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClJlbXBsYWNlciBsZXMgdmFsZXVycyAiIyIgZGFucyB0b3V0ZSBsYSBiYXNlIGRlIGRvbm7DqWVzIHBhciAiYXVjdW4iKiogICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gUXVlbCBwcm9ibMOobWUgY2UgcmVtcGxhY2VtZW50IHBldXQtaWwgcHJvdm9xdWVyPyAgICANCi0gRXhwbG9yZXIgbCdpbXBhY3QgZGVzIHRyb2lzIGV4cHJlc3Npb25zIGRlIHJlbXBsYWNlbWVudCBzdWl2YW50ZXM6ICANCg0KMS4gYHZhbHVlLnJlcGxhY2UoIiMiLCAiYXVjdW4iKWAgICANCihyZW1wbGFjZSBsZSBjYXJhY3TDqHJlICM6IGF1Y3VuIGV0IGF1Y3VuTi9EICkgICAgIA0KIA0KMi4gYGlmKHZhbHVlLmNvbnRhaW5zKCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgIA0KKHJlbXBsYWNlIGxlcyBjZWxsdWxlcyBkZXMgIyBldCAjTkQgcGFyIGF1Y3VuKSAgDQoNCjMuIGBpZih2YWx1ZT09KCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgICAgDQoocmVtcGxhY2Ugc2V1bGVtZW50IGxlcyBjZWxsdWxlcyAjLCBwYXMgbGVzICNORCBwYXIgYXVjdW4pIA0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KKioqDQoNCiMjIDkuNS4gQ3LDqWVyIGV0IGNvcGllciBkZXMgY29sb25uZXMNCg0KPC9icj4NCg0KYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgDQoNCiFbXShpbWFnZXMvT1IzMi5qcGcpDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBzdXIgbGEgYmFzZSBkZSBsYSBjb2xvbm5lICpKb3VyIGRlIGxhIHNlbWFpbmUqIGluZGlxdWFudCBzaSBsZSBqb3VyIGVzdCBlbiBzZW1haW5lIG91IGZpbiBkZSBzZW1haW5lLg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KYGlmKHZhbHVlID4gNSwiZmluIGRlIHNlbWFpbmUiLCJzZW1haW5lIilgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgY29sb25uZSDDoCBwYXJ0aXIgZGUgbGEgY29sb25uZSAqaGV1cmUgZGUgbCdpbmNpZGVudCogZW4gbmUgY29uc2VydmFudCBxdWUgbCdoZXVyZSwgc2FucyBsZXMgbWludXRlcywgZXQgcmFqb3V0ZXIgbGEgbGV0dHJlIGggcG91ciBkb25uZXIgcGFyIGV4ZW1wbGUgY2VjaTogMTU6MTIgIC0+ICAxNWguICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmB2YWx1ZS5zcGxpdCgnOicpWzBdICsgImgiYC4gIA0KDQpPdQ0KDQpgdmFsdWUuc3BsaXRCeUxlbmd0aHMoMilbMF0gKyAiaCJgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQoqKioNCg0KDQojIDEwLiBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHsjZXhwcmVzc2lvbn0NCg0KIyMgMTAuMS4gQ2FyYWN0w6lyaXN0aXF1ZXMgIA0KDQotIEwndXNhZ2UgZGUgR1JFTCBwZXJtZXQgZGVzIG1hbmlwdWxhdGlvbnMgZGUgZG9ubsOpZXMgYmVhdWNvdXAgcGx1cyBhdmFuY8OpZXMgcXVlIGwndXRpbGlzYXRpb24gZGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBtYWlzIE9wZW5SZWZpbmUgcGVybWV0IGVuIHBsdXMgZGUgY29tYmluZXIgbCd1dGlsaXNhdGlvbiBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGF2ZWMgR1JFTCBwb3VyIGVuIGF1Z21lbnRlciBsYSBwdWlzc2FuY2UuIA0KLSBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBlcm1ldHRlbnQsIMOgIHBhcnRpciBkJ3VuZSBzeW50YXhlIHNww6ljaWZpcXVlLCBkJ2lkZW50aWZpZXIgZGVzIHBhdHRlcm5zIGRhbnMgdW4gY29udGVudS4gIA0KLSBMb3JzcXUndXRpbGlzw6llcyBhdmVjIEdSRUwsIGNlcyBleHByZXNzaW9ucyBwZXJtZXR0ZW50IGRvbmMgZCdpZGVudGlmaWVyIGV0IGQnZXh0cmFpcmUgZGVzIGNvbnRlbnVzIHRyw6hzIHByw6ljaXMgcG91ciBlbnN1aXRlIGxlcyBtYW5pcHVsZXIgc2Vsb24gbGVzIGJlc29pbnMuICANCi0gRWxsZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqWVzIMOgIGRpZmbDqXJlbnRzIGVuZHJvaXRzIGRhbnMgT3BlblJlZmluZSBldCBkb2l2ZW50IHRvdWpvdXJzIMOqdHJlIGVudG91csOpZXMgZGUgYC8gL2A6IGZpbHRyZXMsIGZhY2V0dGVzLCBmZW7DqnRyZSBHUkVMLg0KLSBDZXJ0YWluZXMgZXhwcmVzc2lvbnMgcGV1dmVudCBzJ8OpY3JpcmUgZW4gR1JFTCBhdmVjIG91IHNhbnMgcmVnZXguICANCi0gTGVzIGZvbmN0aW9ucyBHUkVMIHF1aSBhY2NlcHRlbnQgbGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlczogYHJlcGxhY2VgLCBgbWF0Y2hgLCBgcGFydGl0aW9uYCwgYHJwYXJ0aXRpb25gLCBgc3BsaXRgLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMzMuanBnKQ0KDQoNCi0gTWFpcyBjZXJ0YWluZXMgZm9uY3Rpb25zIChjb21tZSBgbWF0Y2hgKSBuJ2FjY2VwdGVudCBxdWUgY2VzIGV4cHJlc3Npb25zLiAgDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KDQpMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyBhdmVjIHBsdXNpZXVycyBhdXRyZXMgbGFuZ2FnZXMgZG9udCBbUl0oaHR0cHM6Ly90b3dhcmRzZGF0YXNjaWVuY2UuY29tL2EtZ2VudGxlLWludHJvZHVjdGlvbi10by1yZWd1bGFyLWV4cHJlc3Npb25zLXdpdGgtci1kZjVlODk3Y2E0MzIpIGV0IFtQeXRob25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vcmVnZXguaHRtbCkgZXQgZGFucyBkZXMgbG9naWNpZWxzIHF1aSBuJ29udCByaWVuIMOgIHZvaXIgYXZlYyBsZXMgc3RhdGlzdGlxdWVzIGNvbW1lIFtPcGVuT2ZmaWNlXShodHRwczovL3dpa2kub3Blbm9mZmljZS5vcmcvd2lraS9Eb2N1bWVudGF0aW9uL0hvd19Ub3MvUmVndWxhcl9FeHByZXNzaW9uc19pbl9Xcml0ZXIpLg0KDQpQb3VyIGVuIHNhdm9pciBwbHVzOiAgDQotIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9VbmRlcnN0YW5kaW5nLVJlZ3VsYXItRXhwcmVzc2lvbnMgIA0KLSBodHRwczovL3JlZ2V4MTAxLmNvbS8gIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMjIDEwLjIuIExhIHN5bnRheGUgZGUgYmFzZTogICANCg0KTGEgc3ludGF4ZSBlc3QgY29tcG9zw6llIGQnw6lsw6ltZW50cyBwZXJtZXR0YW50IGRlICBjaWJsZXIgZGVzIGNhcmFjdMOocmVzIHByw6ljaXMgZXQgZGUgZMOpZmluaXIgbGV1ciBlbXBsYWNlbWVudCBldCBsZXVyIG9jY3VycmVuY2UuDQoNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgVFlQRVMgREUgQ0FSQUNUw4hSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVVBTlRJRklDQVRFVVJTIEVUIEVNUExBQ0VNRU5UICAgICAgICAgICAgICAgICB8IA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kw0KfCBgLmAgOiBO4oCZaW1wb3J0ZSBxdW9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYCtgIDogMSBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcd2AgOiBuJ2ltcG9ydGUgcXVlbCBtb3QsIGNoaWZmcmUgb3UgXyAgKGBcV2AgOiBzYXVmKSAgICAgfCBgKmAgOiAwIG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXGRgIDogQ2hpZmZyZXMgICAgICAoYFxEYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgICB8IGA/YCA6IDAgb3UgdW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxzYCA6IEVzcGFjZXMgICAgICAgICAoYFxTYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgfCBgezJ9YCA6IE5vbWJyZSBleGFjdCAoaWNpIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW0EtWl1gIDogTWFqdXNjdWxlcyAgICAgKGBbXkEtWl1gIDogc2F1ZikgICAgICAgICAgICB8IGB7LDR9YCA6IEVudHJlIDAgZXQgNCBpbmNsLiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthLXpdYCA6IE1pbnVzY3VsZXMgICAgICAoYFteYS16XWAgOiBzYXVmKSAgICAgICAgICAgfCBgezQsfWAgOiA0IG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthYmQ7XWAgOiBsZXMgbGV0dHJlcyBhLCBiLCBjLCBkIGV0IGxlIDsgICAgICAgICAgICAgfCBgezE7M31gIDogMSBPVSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgYWJjZGAgOiB1bmUgb3UgcGx1c2lldXJzIGxldHRyZXMgZXhhY3RlcyAgICAgICAgICAgICB8IGB7MSwzfWAgOiBFbnRyZSAxIGV0IDMgaW5jbC4gICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGB8YCA6IE91ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBeYCA6IETDqWJ1dCBkJ3VuZSBsaWduZSAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGAoKWAgOiBHcm91cGVyIHVuIGNvbnRlbnUgZXQgbGUgZ2FyZGVyIGVuIG3DqW1vaXJlICAgICAgfCBgJGAgOiBGaW4gZCd1bmUgbGlnbmUgb3UgcmFwcGVsZXIgdW4gZ3JvdXBlICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCAgYFxgIDogQ2hlcmNoZXIgdW4gY2FyYWN0w6hyZSBzcMOpY2lhbCBsaXR0w6lyYWxlbWVudCAgICB8IFNhbnMgcXVhbnRpZmljYXRldXIsIGwnb2NjdXJyZW5jZSBlc3QgZGUgMSAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCg0KIyMjIyMgUGFyIGV4ZW1wbGUsIGplIGNoZXJjaGUgdW4gY29udGVudSBjb3JyZXNwb25kYW50IGF1IG1vdGlmOiAgDQoNCmBeXGR7NH0gK1tBLVpdXC5gICAgIA0KICAgDQotIGTDqWJ1dGUgcGFyIDQgY2hpZmZyZXMgICANCi0gc3VpdmkgZCd1biBlc3BhY2Ugb3UgcGx1cyAgIA0KLSBzdWl2aSBkJ3VuZSBsZXR0cmUgbWFqdXNjdWxlIGF2ZWMgdW4gcG9pbnQgICANCg0KPC9icj4NCg0KIyMjIyMgQXV0cmVzIGV4ZW1wbGVzIGF2ZWMgbGEgc3ludGF4ZSBPcGVuUmVmaW5lOg0KDQotIGB2YWx1ZS5maW5kKC9bQ2NdYXJvbGluZS8pYDogQ2Fyb2xpbmUgZXQgY2Fyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Ercm9saW5lLylgOiBjYXJvbGluZSBldCBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYSpyb2xpbmUvKWA6IGNhcm9saW5lLCBjYWFhcm9saW5lIGV0IGNyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2E/cm9saW5lLylgOiBjYXJvbGluZSBldCBjcm9saW5lIG1haXMgcGFzIGNhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2F7NH1yb2xpbmUvKWA6IGNhYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL15DYXJvbFxiLylgOiBDYXJvbCBlbiBkw6lidXQgZCdleHByZXNzaW9uLCBtYWlzIHBhcyBDYXJvbGluZSAoXGIgPSAiYm91bmRhcnkiKQ0KDQotIGB2YWx1ZS5maW5kKC9jW2Etel17Nn1lLylgOiBjICsgNiBtaW51c2N1bGVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DW2EtekEtWjAtOV17Nn1lLylgOiBDICsgNiBtaW51c2N1bGVzLCBtYWp1c2N1bGVzIG91IGNoaWZmcmVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DXHd7Nn1lLylgOiBDICsgW0EtWmEtejAtOV9dICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DLns2fWUvKWA6IEMgKyA2IG4naW1wb3J0ZSBxdW9pICsgZQ0KDQoNCioqKg0KDQojIyBFeGVyY2ljZQ0KDQojIyMgTWFuaXB1bGVyIGxlcyDDqWzDqW1lbnRzIGRlIHLDqWbDqXJlbmNlcyBiaWJsaW9ncmFwaGlxdWVzDQoNCiFbXShpbWFnZXMvT1IzNi5qcGcpDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoxLiBBbGxlciBzdXIgbGUgW2d1aWRlIEFQQV0oaHR0cHM6Ly9iaWIudW1vbnRyZWFsLmNhL2NpdGVyL3N0eWxlcy1iaWJsaW9ncmFwaGlxdWVzL2FwYT90YWI9MzI4MSkuICAgICANCjIuIENvcGllciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZGUgTGVtYWlyZSBldCBMZWJvdmljaSBhdSBwb2ludCAyLjEuICAgICAgDQozLiBEYW5zIE9wZW5SZWZpbmUsIGNsaXF1ZXIgc3VyIGxlIHBldGl0IGxvZ28gZW4gaGF1dCDDoCBnYXVjaGUgLT4gYENyw6llciB1biBwcm9qZXRgIC0+IGBQcmVzc2UtcGFwaWVyYDogQ29sbGVyIGxlcyBkZXV4IHLDqWbDqXJlbmNlcyBlbiAgYWpvdXRhbnQgdW4gc8OpcGFyYXRldXIgKioiOyIqKiDDoCBsYSBmaW4gZGUgbGEgcHJlbWnDqHJlIC0+IFN1aXZhbnQuICAgICAgIA0KDQo0LiBNb2RpZmllciBsZXMgb3B0aW9uczogDQogIC0gTGVzIGNvbG9ubmVzIHNvbnQgc8OpcGFyw6llcyBwYXIgLSBwZXJzb25uYWxpc8OpICI7Ii4gIA0KICAtIETDqWNvY2hlciAiQW5hbHlzZXIgbGEgb3UgbGVzCTEgbGlnbmUocykgc3VpdmFudGUocykgY29tbWUgZGVzIGVudMOqdGVzIGRlIGNvbG9ubmVzIi4gIA0KNS4gQ3LDqWVyIHByb2pldC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KNi4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgICANCg0KNy4gRXhhbWluZXIgbCdpbXBhY3QgZGUgY2VzIGRldXggY29tbWFuZGVzICoqR1JFTCArIHJlZ2V4KiouIFF1J2VzdC1jZSBxdWkgc2UgcGFzc2U/DQoNCi0gw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXI6IA0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLylgICANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pLmpvaW4oJywnKS5yZXBsYWNlKCIoIiwiICIpLnJlcGxhY2UoIikiLCAiIilgICANCg0KLT4gQXR0ZW50aW9uIGF1eCBbcXVhbnRpZmljYXRldXJzICJnb3VybWFuZHMiXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvc3RhbmRhcmQvYmFzZS10eXBlcy9xdWFudGlmaWVycy1pbi1yZWd1bGFyLWV4cHJlc3Npb25zI2dyZWVkeS1hbmQtbGF6eS1xdWFudGlmaWVycykgKHZzIHBhcmVzc2V1eCkuDQoNCjwvYnI+DQoNCsOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmU6ICANCg0KICAtIENyw6llciBsYSBjb2xvbm5lIEF1dGV1ciA6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVswXWAgb3UgYHZhbHVlLnNwbGl0KCIoIilbMF1gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQW5uw6llOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCIpIilbMF1gICAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKj8oXGR7NH0pLio/LylbMF1gLiAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB0aXRyZTogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVswXWAuICAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRldXI6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIpLiIpWzJdYC4gICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0aW9uOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiw6lkIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLiooXGQrKS4gw6lkLiovKVswXWAuICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB2b2x1bWU6IGB2YWx1ZS5wYXJ0aXRpb24oInZvbC4iKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKnZvbC4gKFxkKykuKi8pWzBdYC4gIA0KTWFpcyBlbmNvcmUgYXZlYyByZWdleDogIA0KLSBTdXBwcmltZXIgbGVzIGxldHRyZXMgZHUgcHLDqW5vbTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpLywgIiAiKWAuICANCi0gU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSBzYXVmIGxlcyBub21zIGRlIGZhbWlsbGU6IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKXwoZXQpfCgsKS8sICIgIilgLiAgDQoNCjwvYnI+DQoNCioqKg0KDQojIDExLiBUcmFuc3Bvc2l0aW9uDQoNCiMjIEV4ZXJjaWNlOiB0cmFuc3Bvc2VyIHVuIHRhYmxlYXUgZCdpbmRpY2F0ZXVycyBkdSBXREkNCjwvYnI+DQoNCioqRmljaGllciBvcmlnaW5hbCB0w6lsw6ljaGFyZ8OpIGRlIGxhIFtCYW5xdWUgbW9uZGlhbGVdKGh0dHBzOi8vZGF0YWJhbmsuYmFucXVlbW9uZGlhbGUub3JnL3JlcG9ydHMuYXNweD9zb3VyY2U9d29ybGQtZGV2ZWxvcG1lbnQtaW5kaWNhdG9ycykgZW4gZm9ybWF0IC5jc3YgY29tcG9zw6kgZGUgNSBwYXlzIGV0IDQgaW5kaWNhdGV1cnMgw6AgbCdob3Jpem9udGFsZSBldCAzIGFubsOpZXMgw6AgbGEgdmVydGljYWxlKiogIA0KDQotIFBvdXIgb3V2cmlyIGxlIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpXRElfRGF0YV9FeHRyYWN0LmNzdiogLT4gQ2xpcXVlciBzdXIgbGUgYm91dG9uIFJBVyAtPiBjb3BpZXIgbCdhZHJlc3NlIGR1IG5hdmlnYXRldXIuDQogIC0gRGFucyBPcGVuUmVmaW5lLCBDcsOpZXIgdW4gcHJvamV0IC0+IEFkcmVzc2VzIHdlYiAoVVJMcykgLT4gY29sbGVyIGxlIGxpZW4uDQogIA0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UxLmpwZykNCg0KPC9icj4NCg0KKioxLiBUcmFuc3Bvc2VyIGxlcyBkYXRlcyDDoCBsJ2hvcml6b250YWxlIChmb3JtYXQgKmxvbmcqKSoqICANCg0KPC9icj4NCg0KKsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zcG9zZXIgLT4gVHJhbnNwb3NlciBsZXMgY2VsbHVsZXMgZGUgcGx1c2lldXJzIGNvbG9ubmVzIGVuIGxpZ25lcy4uLioNCg0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMi5qcGcpDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UzLmpwZykNCg0KPC9icj4NCg0KKioyLiBSZW1wbGlyIGF1dG9tYXRpcXVlbWVudCBsZXMgY2VsbHVsZXMgdmlkZXMgZGVzIGRldXggY29sb25uZXMgw6AgbGEgdmVydGljYWxlKioNCg0KKsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFJlY29waWVyIGxlcyB2YWxldXJzIGRhbnMgbGVzIGNlbGx1bGVzIHZpZGVzIGNvbnPDqWN1dGl2ZXMqDQoNCjwvYnI+DQoNCioqMy4gVHJhbnNwb3NlciBsZXMgaW5kaWNhdGV1cnMgZW4gdmFyaWFibGVzIMOgIGxhIHZlcnRpY2FsZSoqDQoNCipUcmFuc3Bvc2VyIC0+IENvbnZlcnRpciBlbiBsaXN0ZSBsZXMgY29sb25uZXMgZGUgY2zDqS92YWxldXIuLi4qDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlNC5qcGcpDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlNS5qcGcpDQoNCjwvYnI+DQoNCg0KKioqDQoNCiMgMTIuIEV4cG9ydGVyIHVuIGZpY2hpZXIgZXQgZmVybWVyIE9wZW5SZWZpbmUNCg0KLSBGb25jdGlvbiDDoCB1dGlsaXNlciBsb3JzcXVlIGwnb24gZXN0IHByw6p0IMOgIGV4cG9ydGVyIHNvbiBmaWNoaWVyIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgcG91ciB0cmF2YWlsbGVyIGRhbnMgdW4gYXV0cmUgbG9naWNpZWwgKC5jc3YsIC54bHMuLi4pDQotIE9SIHNhdXZlZ2FyZGUgYXV0b21hdGlxdWVtZW50IGxlcyBmaWNoaWVycyBzb3VzIGZvcm1lIGQnYXJjaGl2ZXMgZGUgcHJvamV0IGRhbnMgdW4gZG9zc2llciBzdXIgbGUgcG9zdGUgZGUgdHJhdmFpbCBhdXhxdWVsbGVzIG9uIHBldXQgYWNjw6lkZXIgZW4gY2xpcXVhbnQgc3VyIGBPdXZyaXIgdW4gcHJvamV0YCBzdXIgbGEgcGFnZSBwcmluY2lwYWxlLg0KLSBMJ291dGlsIGBFeHBvcnRldXIgdGFidWxhaXJlIHBlcnNvbm5hbGlzw6lgIGVzdCB0csOocyB1dGlsZSBwb3VyIHBhcmFtw6l0cmVyIGwnZXhwb3J0YXRpb24gKHPDqWxlY3Rpb24gZGUgY29sb25uZXMsIGZvcm1hdCBkZSBkYXRlcywgZm9ybWF0IGRlIGZpY2hpZXIuLi4pDQotIEZlcm1lciBsJ29uZ2xldCBuZSBmZXJtZSBwYXMgbGUgc2VydmV1ciBxdWkgY29udGludWVyYSDDoCByb3VsZXIgZW4gYXJyacOocmUtcGxhbi4NCi0gQWxsZXIgw6AgbGEgZmVuw6p0cmUgbm9pcmUgZHUgdGVybWluYWwgZXQgdXRpbGlzZXIgbGVzIHRvdWNoZXMgQ1RSTCArIEMganVzcXUnw6AgY2UgcXUnZWxsZSBzZSBmZXJtZSBkJ2VsbGUtbcOqbWUgKGlsIGVzdCBwYXJmb2lzIG7DqWNlc3NhaXJlIGRlIHLDqXDDqXRlciDDoCBwbHVzIGQndW5lIHJlcHJpc2UpLiBMZSBmaWNoaWVyIHNlcmEgZW5yZWdpc3Ryw6kgdW5lIGRlcm5pw6hyZSBmb2lzIGV0IGxlIGxvZ2ljaWVsIHNlcmEgIG1haW50ZW5hbnQgYmVsIGV0IGJpZW4gZmVybcOpLg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDEzLiBRdWVscXVlcyByZWNldHRlcyBwb3VyIGZhaXJlIGR1cmVyIGxlIHBsYWlzaXINCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRXh0cmFpcmUgc2V1bGVtZW50IGNlcnRhaW5zIGNhcmFjdMOocmVzIHNlbG9uIGxldXIgcG9zaXRpb24NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KRXh0cmFpcmUgc2V1bGVtZW50IGxlcyBjYXJhY3TDqHJlcyBkZSA1IMOgIDcgIA0KDQotIHZhbHVlWzUsIDddDQoNCkV4dHJhaXJlIGxlcyBjYXJhY3TDqHJlcyDDoCBwYXJ0aXIgZGUgNSAgDQoNCi0gdmFsdWUuc3Vic3RyaW5nKDUpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgU2F2b2lyIHNpIHVuZSBjb25kaXRpb24gZXN0IHZyYWllIG91IGZhdXNzZT8NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkVzdC1jZSBxdWUgbGUgY29udGVudSBkZXMgdmFsZXVycyBjb3JyZXNwb25kIMOgICIyMDE5LTAxLTAxIiAgDQoNCi0gdmFsdWU9PSIyMDE5LTAxLTAxIg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbm5hw650cmUgbGEgbG9uZ3VldXIgZGVzIHZhbGV1cnMgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbXB0ZXIgbGUgbm9tYnJlIGRlIG1vdHMgZGFucyBkZXMgY2VsbHVsZXMgKHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnNwbGl0KCIgIikubGVuZ3RoKCkgb3UgdmFsdWUuc3BsaXQoL1xzLykubGVuZ3RoKCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDYWxjdWwgZCd1biBwb3VyY2VudGFnZSBhcnJvbmRpIChleCBkJ3VuIHLDqXN1bHRhdCBzdXIgMTApDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHJvdW5kKCh2YWx1ZSoxMDApIC8gMTApDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVHJhbnNmb3JtZXIgdW4gZm9ybWF0IGRhdGUgZW4gZm9ybWF0IHRleHRlIHBsdXMgbGlzaWJsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS50b1N0cmluZygiZGQgTU1NTSB5eXl5IikNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgTGEgY3LDqWF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZSBsaXN0ZXMgKCphcnJheSopIC0gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGZvbmN0aW9uIGQndW4gc8OpcGFyYXRldXIgcG91ciBuZSBjb25zZXJ2ZXIgcXVlIGxlIHByZW1pZXIgw6lsw6ltZW50ICAgIA0KDQotIHZhbHVlLnNwbGl0KCIgIilbMF0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgcG91ciBsZSByw6lvcmRvbm5lciANCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnJldmVyc2UoKS5qb2luKCIsIikNCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnNvcnQoKS5qb2luKCIsIikNCg0KRGl2aXNlciBhcHLDqHMgbGVzIDMgcHJlbWllcnMgY2FyYWN0w6hyZXMgZXQgY29uc2VydmVyIGxlIHByZW1pZXIgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygzKVswXSANCg0KRGl2aXNlciBzZWxvbiBsZSB0eXBlIGRlIGNhcmFjdMOocmVzIGV0IHJldGVuaXIgbGUgZGV1eGnDqG1lIMOpbMOpbWVudCAgDQoNCi0gdmFsdWUuc3BsaXRCeUNoYXJUeXBlKClbMV0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgc3VyIHVuIHRlcm1lIHggZXQgY29uc2VydmVyIGxlIGNvbnRlbnUgcHLDqWPDqWRlbnQgDQoNCi0gdmFsdWUucGFydGl0aW9uKCJ0ZXJtZSIpWzBdDQoNCi0gdmFsdWUucGFydGl0aW9uKCIgdG8gIilbMl0ucGFydGl0aW9uKCIgb24gIilbMF0NCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEludmVyc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgZXQgaW52ZXJzZXIgbCdvcmRyZSBkZSBwcsOpc2VudGF0aW9uIGVuIGFqb3V0YW50IHVuZSB2aXJndWxlIGVudHJlIGxlcyBkZXV4ICANCg0KLSB2YWx1ZS5zcGxpdCgnICcpWzFdICsgIiwiICsgIiAiICsgdmFsdWUuc3BsaXQoJyAnKVswXQ0KDQpPVQ0KDQotIHZhbHVlLm1hdGNoKC8oLiopLCguKikvKS5yZXZlcnNlKCkuam9pbigiICIpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBam91dGVyIHVuIHrDqXJvIHBvdXIgYXZvaXIgdW4gbm9tYnJlIGRlIGNhcmFjdMOocmVzIHByw6ljaXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkFqb3V0ZXIgdW4gesOpcm8gZGV2YW50IGxlIGNvbnRlbnUgc2kgZG9ubmUgdW5lIGNoYWluZSBkZSAwIMOgIDIgY2FyYWN0w6hyZXMgIA0KDQotICIwIlswLDItbGVuZ3RoKHZhbHVlKV0gKyB2YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEFwcGxpcXVlciBkZXMgY29uZGl0aW9ucw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRm9uY3Rpb24gaWYgLSBtw6ptZSBjaG9zZSBxdWUgZGFucyBleGNlbCAgDQoNCi0gaWYodGVzdCwgc2kgdGVzdCBlc3QgdnJhaSwgc2kgdGVzdCBlc3QgdnJhaSkNCg0KU2kgbGEgY2VsbHVsZSBjb250aWVudCB4LCDDqWNyaXJlIHgsIHNpbm9uIHkNCg0KLSBpZih2YWx1ZS5jb250YWlucygieCIpLCAieCIsICJ5IikNCiANCi0gaWYodmFsdWUuY29udGFpbnMoIjEiKSwgdmFsdWUsIG51bGwpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb21wYXJlciBkZXV4IGNvbG9ubmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpJZGVudGlmaWVyIHNpIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUgZXN0IHBhcmVpbCDDoCB1bmUgYXV0cmUgIA0KDQotIHZhbHVlID09IGNlbGxzWydhdXRyZS1jb2xvbm5lJ10udmFsdWUNCg0KRXN0LWNlIHF1ZSBsZSBwcmVtaWVyIGNhcmFjdMOocmUgZGUgbGEgY29sb25uZSB4IGVzdCBsZSBtw6ptZSBxdWUgbGEgY29sb25uZSB5ICANCg0KLSBjZWxsc1siY29sb25uZTEiXS52YWx1ZVswXSA9PSBjZWxsc1siY29sb25uZTIiXS52YWx1ZVswXQ0KDQpDb21wYXJlciBsZSBjb250ZW51IGRlIGRldXggY29sb25uZXMgZXQgbW9kaWZpZXIgbGVzIHZhbGV1cnMgc2Vsb24gbGUgcsOpc3VsdGF0IGRlIGxhIGNvbmRpdGlvbiAgDQoNCi0gaWYoY2VsbHNbImNvbG9ubmUxIl0udmFsdWUgPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWUsICJQYXJlaWwiLCAiUGFzIHBhcmVpbCIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVsOpcmlmaWVyIGxlIGZvcm1hdCBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUudHlwZSgpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBGYWlyZSBkZXMgY2FsY3VscyBzaW1wbGVzICh2YWxldXJzIG51bcOpcmlxdWVzKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpTb21tZSBkJ3VuZSBjb2xvbm5lIHBsdXMgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSArIGNlbGxzWydKb3VyIGR1IG1vaXMnXS52YWx1ZQ0KDQpBcnJvbmRpciBsZSBjb250ZW51ICANCg0KLSByb3VuZCh2YWx1ZSkNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlcHJlbmRyZSBldCBjb25jYXTDqW5lciBsZSBjb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBlbiBmdXNpb25uYW50IGxlIGNvbnRlbnUgZGUgZGV1eCBhdXRyZXMgZXQgYWpvdXRlciBkdSB0ZXh0ZSAgDQoNCi0gY2VsbHNbJ25vbSddLnZhbHVlICsgY2VsbHNbJ25vbSddLnZhbHVlICsgIkJvbmpvdXIhIg0KDQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgYXZlYyBsZXMgdHJvaXMgcHJlbWllcnMgY2FyYWN0w6hyZXMgc2V1bGVtZW50ICANCg0KLSBjZWxsc1snU3ltcHRvbWUnXS52YWx1ZVswLDNdDQoNClRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSBlbiBjb25jYXTDqW5hbnQgbGUgY29udGVudSBkJ3VuZSBhdXRyZSAgDQoNCi0gdmFsdWUgKyAnICcgKyBjZWxsc1snc3RyZWV0LXR5cGUnXS52YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlbXBsYWNlciBkZXMgY2FyYWN0w6hyZXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KUmVtcGxhY2VyIHRvdXQgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIChpY2ksIHZpZGVyIGxhIGNvbG9ubmUpICANCg0KLSB2YWx1ZS5yZXBsYWNlKHZhbHVlLCAiIikNCg0KUmVtcGxhY2VyIHVuZSBsZXR0cmUgcGFyIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUucmVwbGFjZUNoYXJzKCJvIiwgImEiKQ0KDQpGYWlyZSBwbHVzaWV1cnMgcmVtcGxhY2VtZW50cyBkJ3VuIGNvdXAgIA0KDQotIHZhbHVlLnJlcGxhY2UoIjEiLCAidW4iKS5yZXBsYWNlKCIyIiwgImRldXgiKS5yZXBsYWNlKCIzIiwgInRyb2lzIikNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJZGVudGlmaWVyIGRlcyBjZWxsdWxlcyBxdWkgY29tbWVuY2VudCBwYXIuLi4gKHLDqXN1bHRhdCBib29sw6llbikNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSB2YWx1ZS5zdGFydHNXaXRoKCJCZXJyaSIpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFN1cHByaW1lciB1biBjYXJhY3TDqHJlIGRlIGTDqWJ1dCBvdSBmaW4gZGUgdmFsZXVyOg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpTdXBwcmltZSDigJxT4oCdIGR1IGTDqWJ1dCBkZSBsYSBjZWxsdWxlICANCg0KLSB2YWx1ZS5yZXBsYWNlKC9eUy8sIiIpIFtyZWdleCBeIGluZGlxdWUgbGUgZMOpYnV0IGQndW5lIGNlbGx1bGVdDQoNClN1cHByaW1lICIuIiDDoCBsYSBmaW4gZGUgbGEgY2VsbHVsZSAgDQoNCi0gdmFsdWUucmVwbGFjZSgvXC4kLywiIikgW3JlZ2V4ICQgaW5kaXF1ZSBsYSBmaW4gZCd1bmUgY2VsbHVsZV0NCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpNb2RpZmllci9zdXBwcmltZXIgbGEgcG9uY3R1YXRpb24NCg0KLSB2YWx1ZS5yZXBsYWNlKC9ccHtQdW5jdH0vLCcgJykNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFRyYXZhaWxsZXIgYXZlYyB1biBmb3JtYXQgZGF0ZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXh0cmFpcmUgc2V1bGVtZW50IHVuZSBwYXJ0aWUgZCd1bmUgZGF0ZSAgDQoNCi0gdmFsdWUudG9EYXRlKCkuZGF0ZVBhcnQoInllYXIiKSAgDQoNCi0gIGRpZmYobm93KCksdmFsdWUsJ3dlZWtzJykgIA0KDQo8L2Rpdj4NCg0KDQoqKioNCg0KDQojIDE0LiBSZXNzb3VyY2VzDQoNCi0gW1NpdGUgZXQgZG9jdW1lbnRhdGlvbiBvZmZpY2llbHNdKGh0dHBzOi8vb3BlbnJlZmluZS5vcmcvKQ0KDQotIEpvaG4gTGl0dGxlLCAyMDE4LCBbQ2xlYW5pbmcgRGF0YSB3aXRoIE9wZW5SZWZpbmVdKGh0dHBzOi8vbGliam9obi5naXRodWIuaW8vb3BlbnJlZmluZS9pbmRleC5odG1sKSAgDQoNCi0gRXZhbiBXaWxsLCAyMDIxLCBbR2V0IFN0YXJ0ZWQgd2l0aCBPcGVuUmVmaW5lOiBFeHBsb3JlLCBDbGVhbiwgYW5kIFRyYW5zZm9ybSB5b3VyIERhdGEhXShodHRwczovL2V2YW53aWxsLmdpdGh1Yi5pby9vcGVucmVmaW5lLWIvKSAgDQoNCi0gVUNMQSwgMjAxOSwgW0dldHRpbmcgc3RhcnRlZCB3aXRoIE9wZW5SZWZpbmUgRGlnaXRhbCBIdW1hbml0aWVzIDIwMV0oaHR0cDovL21pcmlhbXBvc25lci5jb20vY2xhc3Nlcy9kaDIwMXcxOS90dXRvcmlhbHMtZ3VpZGVzL2RhdGEtY2xlYW5pbmctYW5kLW1hbmlwdWxhdGlvbi9nZXR0aW5nLXN0YXJ0ZWQtd2l0aC1vcGVucmVmaW5lLykNCg0KLSBbUmVmaW5lUHJvIEtub3dsZWRnZSBCYXNlIGZvciBPcGVuUmVmaW5lXShodHRwczovL2tiLnJlZmluZXByby5jb20vKQ0KDQotIFNldGggdmFuIEhvb2xhbmQsIFJ1YmVuIFZlcmJvcmdoLCBhbmQgTWF4IERlIFdpbGRlLCBbQ2xlYW5pbmcgRGF0YSB3aXRoIE9wZW5SZWZpbmVdKGh0dHBzOi8vcHJvZ3JhbW1pbmdoaXN0b3JpYW4ub3JnL2VuL2xlc3NvbnMvY2xlYW5pbmctZGF0YS13aXRoLW9wZW5yZWZpbmUpDQoNCi0gW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwczovL2RvYW5hLmdpdGJvb2tzLmlvL3Rlc3QvY29udGVudC8pDQoNCi0gRGF0YSBDYXJwZW50cnksIFtEYXRhIENsZWFuaW5nIHdpdGggT3BlblJlZmluZSBmb3IgRWNvbG9naXN0c10oaHR0cHM6Ly9kYXRhY2FycGVudHJ5Lm9yZy9PcGVuUmVmaW5lLWVjb2xvZ3ktbGVzc29uLzAwLWdldHRpbmctc3RhcnRlZC9pbmRleC5odG1sKQ0KDQotIE93ZW4gU3RlcGhlbnMsIDIwMTQsIFtJbnRyb2R1Y3Rpb24gdG8gT3BlblJlZmluZV0oaHR0cDovL3d3dy5tZWFuYm95ZnJpZW5kLmNvbS9vdmVyZHVlX2lkZWFzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzExL0ludHJvZHVjdGlvbi10by1PcGVuUmVmaW5lLWhhbmRvdXQtQ0MtQlkucGRmKQ0KDQotIFZlcmJvcmdoIGV0IERlIFdpbGRlLCAyMDEzLCBbVXNpbmcgT3BlblJlZmluZV0oaHR0cHM6Ly93d3cuZ2JpZi5lcy93cC1jb250ZW50L3VwbG9hZHMvMjAxOC8wMS9Vc2luZy1PcGVuUmVmaW5lQm9vay5wZGYpDQoNCi0gW0xpYnJhcnkgQ2FycGVudHJ5OiBPcGVuUmVmaW5lXShodHRwczovL2xpYnJhcnljYXJwZW50cnkub3JnL2xjLW9wZW4tcmVmaW5lLzAxLWludHJvZHVjdGlvbi9pbmRleC5odG1sKQ0KDQotIFtHcmF0ZWZ1bCBEYXRhXShodHRwczovL2dpdGh1Yi5jb20vc2NvdHR5dGhlcmVkL2dyYXRlZnVsZGF0YS93aWtpKSAgDQoNCi0gW0RhdmlkIEh1eW5oLCBHb29nbGUgUmVmaW5lXShodHRwOi8vd3d3LmRhdmlkaHV5bmgubmV0L3NwYWNlcy9uaWNhcjIwMTEvdHV0b3JpYWwucGRmKQ0KDQotIFtPcGVuIFJlZmluZSBGT3IgTGlicmFyaWFuc10oaHR0cDovL2xpd29uZy5ibG9nc3BvdC5jb20vKQ0KDQotIFtDaGVhdCBTaGVldDogUmVndWxhciBFeHByZXNzaW9ucyAmIEdSRUxdKGh0dHBzOi8vY29kZTRsaWJ0b3JvbnRvLmdpdGh1Yi5pby8yMDE4LTEwLTEyLWFjY2Vzcy9Hb29nbGVSZWZpbmVDaGVhdFNoZWV0cy5wZGYpDQoNCi0gKlJlY2lwZXMqOiBbT3BlbiBSZWZpbmUgZm9yIExpYnJhcmlhbnNdKGh0dHA6Ly9saXdvbmcuYmxvZ3Nwb3QuY29tL3NlYXJjaC9sYWJlbC9yZWNpcGUpDQoNCi0gW0dSRUwgUmVjaXBlc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1JlY2lwZXMpDQoNCi0gW0V0YyFdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9FeHRlcm5hbC1SZXNvdXJjZXMpDQoNCg0KPHN0eWxlPg0KLnJpZ2h0IHsNCiBmbG9hdDogcmlnaHQ7DQp9DQoNCi5jZW50ZXIgew0KIGFsaWduOiBjZW50ZXI7DQp9DQoNCi5ub3RlIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJvcmRlci1jb2xvcjogZ3JlZW47DQogIGJvcmRlci13aWR0aDogdGhpbjsNCiAgZm9udC1zaXplOiA5MCU7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gxIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICNlMGViZWI7DQogIGNvbG9yOiBibGFjazsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCg0KLmJveDIgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYmFja2dyb3VuZDogIzkyYjliOTsNCiAgY29sb3I6IHdoaXRlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KLmNlbnRlciB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLnRpdGxlIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBjb2xvcjogIzAwMzM2NjsNCn0NCg0KLnN1YnRpdGxlIHsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGxlZ2VuZCB7DQogIGNvbG9yOiAjNUE3QjlDOw0KfQ0KDQo8L3N0eWxlPg==